필자는 원하는만큼 문자를 그려야합니다. 그래서 나는 그 목적을 위해 함수를 쓴 : 그것은 어떤 경고를 완벽하게 구축되지 오류 것strcat가 충돌 프로그램을 만듭니다 (0xc0000005)
80
로 정의
void fDrawLine(int length)
{
int i;
char * compLine = (char *) malloc(WINDOW_WIDTH + 2);
for(i = 0; i < length; i++)
strcat(compLine, "-");
fDrawSpacedMessage(compLine, -1, TRUE);
}
WINDOW_WIDTH
, fDrawSpacedMessage
다른 텍스트를 인쇄하는 기능을 중심으로 등이다. 그러나 런타임에서는 모든 것이 작동하지만 fDrawLine
이 실행되면 프로그램이 충돌하고 오류 코드 0xc0000005
가 발생합니다. 메모리 할당에 대해서는 알고 있지만 이미 compLine
문자열을 초기화했습니다.
나는 두 가지를 시도했다. 나는 다른 기능이 그것을 일으켜서 내가 fDrawLine
을 고립 시켰다고 생각했지만 계속 충돌했다. compLine[0] = 0;
, compLine[WINDOW_WIDTH] = {0};
으로 초기화를 변경해도 도움이되지 않았습니다.
우분투가 최신 gcc로 실행되는 다른 컴퓨터에서도 잘 작동하지만 Windows에서 Code :: Blocks (MinGW)를 사용하면 충돌이 계속 발생합니다.
이 코드의 잘못된 점은 무엇입니까?
fDrawSpacedMessage
에 '-'? 또한 '길이'의 가치는 무엇입니까? – i486학교 프로젝트이므로 코드 작성을 배우는 것 같습니다. 다른 것들은 제쳐두고, 당신의 함수를보고 다음 질문에 대답 : 무엇 전화 'fDrawLine (WINDOW_WIDTH * 2);'실제로합니까? 방어 프로그래밍을 배우십시오 – kdopen
1) '길이'가 너무 크지 않도록 보장해야합니다. 'assert (length <(WINDOW_WIDTH + 1));를 추가하십시오. 2)'2'는 여기에있는 매직 넘버입니다. 2에 대한 세부 정보를 제공 하시겠습니까? ('fDrawSpacedMessage()'가 81 개의 "---...--"를 표시하려고 실패 할 수 있습니까?) – chux