タスクは次のとおりです。なぜ私のコードはセグメンテーションフォルトを引き起こしますか?
/* LAB 6タスクA */
/* 保存配列全体IAによってロードすることができるバイナリ ファイル形式で「ファイル名」と呼ばれるファイルにintarr_load_binary()。成功した場合は を返し、失敗した場合はゼロ以外のエラーコードを返します。 長さ0の配列は、空の配列を含む出力ファイルを生成するはずです。 */
/* LAB 6タスクB */
/* ロード 'ファイル名' という名前のファイルから新しい配列は、それが以前に )(intarr_save_binary用いて保存しました。成功した場合に に新たに割り当てられたintarr_tへのポインタを返します。失敗した場合はNULLを返します。
int intarr_save_binary(intarr_t* ia, const char* filename)
{
int returnValue = 0;
unsigned int len = ia->len;
FILE *f;
if(NULL == (f = fopen (filename, "wb")))
{
perror("fopen failed");
returnValue = 1;
}
else if (fwrite (&len, sizeof(int), 1, f) == 1)
{ // then write of length successful
if (fwrite (ia->data, sizeof(int), len, f) == len)
{
returnValue = 0; // indicate success
}
else
{ // else, write of data failed
returnValue = 3;
}
}
else
{ // else, failed to write len value to file
returnValue = 4;
}
fclose(f); // cleanup (writes last buffer to file)
return(returnValue);
}
そしてBのために、私のコードは以下の通りです:
intarr_t* intarr_load_binary(const char* filename)
{
unsigned int len = 0;
FILE *f = NULL;
intarr_t* newia = NULL;
if(NULL == fopen (filename, "rb"))
{ // then, fopen failed
perror("fopen failed");
exit(EXIT_FAILURE);
} // end if
// implied else, fopen successful
if(NULL == (newia = malloc (sizeof(intarr_t)))){
perror("malloc failed");
fclose(f);
exit(EXIT_FAILURE);
} // end if
// implied else, malloc successful
if((fread (&len, sizeof(int), 1, f) != 1))
{ // then fread failed
perror("fread failed");
fclose(f);
free(newia);
exit(EXIT_FAILURE);
} // end if
// implied else, fread for len successful
newia->len = len;
if(NULL == (newia->data = malloc (len*sizeof(int))))
{ // then malloc failed
perror("malloc failed");
fclose(f);
free(newia);
exit(EXIT_FAILURE);
} // end if
// implied else, malloc successful
if(fread(newia->data, sizeof(int), len, f) != len)
{ // then, fread failed
perror("fread failed");
fclose(f);
free(newia->data);
free(newia);
exit(EXIT_FAILURE);
} // end if
// implied else, fread successful
fclose (f);
return newia;
} // end function: intarr_load_binary
誰もがなぜ私のコードの結果で教えてくださいすることができ、Aは、私のコードは次のようさのために */
セグメンテーション障害?どうもありがとうございました。 B、NULL
のコードで
ありがとうございます!私は自分のコードを提出し、その結果をあなたに知らせます。再び、あなたが私を助けてくれて本当に感謝しています!あなたは素晴らしいです! –
同じエラーが再び発生します。 –
これはエラーメッセージです: テストコーナーケース \t intarr_save_binary(NULL、 "foo"); \t ***セグメント違反*** –