SDL이 포함 된 C에서 "누가 백만장자가 되길 원합니다"게임을 쓰고 있습니다. SDL 그래픽을 개발하고 데이터 처리를 별도로 수행했습니다. 후자가 하나인데 문제가 있습니다.C 프로그램은 SIGTRAP 신호를받습니다. 3 회마다 잘 작동합니다.
이 파일은 약. 5000 줄의 .csv 파일을 가져 와서 동적으로 할당 된 메모리 덕분에 세부 사항을 구조체에 넣습니다. 그러면 콘솔에 인쇄됩니다. 그러나 매 3 회마다 작동합니다. 다른 시간에 프로그램이 멈 춥니 다. 디버깅 시도, 그것은 말했다 :
내가이 부분에 문제를 좁혀 생각 어떤 성공.프로그램 수신 신호 SIGTRAP, 추적/중단 점 트랩. 희망 - - 철저하게 충분한 유래를 검색하지 않고, 내가 않았다
size_t getline(char **lineptr, size_t *n, FILE *stream) { char *bufptr = NULL; char *p = bufptr; size_t size; int c; if (lineptr == NULL) { return -1; } if (stream == NULL) { return -1; } if (n == NULL) { return -1; } bufptr = *lineptr; size = *n; c = fgetc(stream); if (c == EOF) { return -1; } if (bufptr == NULL) { bufptr = malloc(128); if (bufptr == NULL) { return -1; } size = 128; } p = bufptr; while(c != EOF) { if ((p - bufptr) > (size - 1)) { size = size + 128; bufptr = realloc(bufptr, size); if (bufptr == NULL) { return -1; } } *p++ = c; if (c == '\n') { break; } c = fgetc(stream); } *p++ = '\0'; *lineptr = bufptr; *n = size; return p - bufptr - 1; }
:
while ((read = getline(&line, &n, kerdes)) != -1) { sp = p = line; field = 0; // The below line triggers the signal questions[cnt] = (Question*) malloc(sizeof(Question)); // Cuts while (*p != '\0') { if (*p == ',') { *p = 0; if (field == 0) questions[cnt]->nth = atoi(sp); if (field == 1) questions[cnt]->question_to = strdup(sp); if (field == 2) questions[cnt]->answer_a = strdup(sp); if (field == 3) questions[cnt]->answer_b = strdup(sp); if (field == 4) questions[cnt]->answer_c = strdup(sp); if (field == 5) questions[cnt]->answer_d = strdup(sp); if (field == 6) questions[cnt]->answer_r = strdup(sp); if (field == 7) questions[cnt]->cat = strdup(sp); *p = ','; sp = p + 1; field++; } p++; } cnt++; }
getline
기능은 this answer의 하나입니다 :
무엇이 문제입니까?
오버 인덱싱이 내 의견으로 뒤 따르지 않으며 free()가 잘 사용됩니다. , Click here
@AnttiHaapala 전체 코드는 내 게시물의 하단에있는 링크를 통해 액세스 할 수 있습니다. 발췌문이 주석으로 처리되면 문제가 발생하지 않습니다. 따라서이 부분 만 강조되었습니다. –
나는 발췌 부분을 가지고 있지만 * 질문은 그대로 서 있어야합니다. –
@AnttiHaapala 나는 당신이 의미하는 것을보고 더 잘하려고 노력할 것입니다. 그동안 CSV가 업로드되었습니다 –