私は、SDLが含まれている、「誰が億万長者になる」と書いています。 私はSDLグラフィックスと別途データ処理を開発しました。 後者が問題です。CプログラムはシグナルSIGTRAPを受信し、すべての3回目の試行でうまく動作します。
これは、およそ5000行の.csvファイルを取得し、動的に割り当てられたメモリの助けを借りて詳細を構造に入れます。 それはコンソールに印刷されます。 しかし、それは毎回3回程度しか動作しません。 その他の場合、プログラムがフリーズします。 デバッグしようとしました:
プログラム受信シグナルSIGTRAP、トレース/ブレークポイントトラップ。
は、私がこの部分に問題を絞り込ん考える:
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からいずれかです。
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;
}
私がやった - うまくいけば - せず、徹底的に十分なstackoverflowのを検索任意の成功。
何が問題が発生する可能性がありますか?
私の意見では、オーバーインデックスはそれの後ろではなく、free()はうまく使用されています。
このリンク以下、ペーストビン上の全体.cファイルを見つけてください: Click here
CSVファイル(非英語)次のリンクを使用してアクセスできます。Click here
@AnttiHaapala全体のコードは、私の記事の下部にあるリンクを介してアクセス可能です。抜粋がコメントアウトされている場合、問題は発生しません。したがって、この部分だけが強調表示されています。 –
私は抜粋を持っていますが、*質問*はそのまま自立していなければなりません。 –
@AnttiHaapala私はあなたが何を意味するかを見て、より良くしようとします。その間、CSVはアップロードされました –