私はこのコードにいくつかの問題があり、少し助けてもらえます。この関数は、ファイルから動的に割り当てられたメモリへの援助のための@JonathanLefflerファイルから文字配列への読み込み、C
感謝を読み込み - 関数インデントは完璧に動作します!しかし、もう一つの問題が出てきました。関数read_fileを使って、fileからchar配列を読み込み、後でインデントに渡します。
============================================== =============================
//--------------- read_file valgrind validations --------------------
==396== 144 bytes in 1 blocks are definitely lost in loss record 62 of 66
==396== at 0x4C2AD10: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==396== by 0x401AC1: read_file (polisher.c:24)
==396== by 0x4025CE: test_indent (test_source.c:174)
==396== by 0x406BC7: srunner_run (in /tmc/test/test)
==396== by 0x402C67: tmc_run_tests (tmc-check.c:134)
==396== by 0x402902: main (test_source.c:235)
==396==
============== ===================
char *read_file(const char *filename)
{
FILE *f = fopen(filename, "r");
if(!f)
return NULL;
int n = 0, c = 0;
char *a = NULL;
c = fgetc(f);
while(c != EOF)
{
n++;
c = fgetc(f);
}
freopen(filename, "r", f);
a = calloc(n + 1, sizeof(char));
c = fgetc(f);
n = 0;
while(c != EOF)
{
a[n] = c;
n++;
c = fgetc(f);
}
a[n] = '\0';
fclose(f);
return a;
}
====== ========================================== ========
START_TEST(test_indent)
{
char *str = read_file("testifile.c");
if (!str) str = read_file("test/testifile.c");
if (!str) {
fail("[M6.01.c] read_file(\"testifile.c\") returned NULL");
}
char *res = indent(str, " ");
if (!res) {
free(str);
free(res);
fail("[M6.01.c] indent(\"testifile.c\") returned NULL");
}
char buf[OUTPUTLEN];
if (mycompare_new(res, ref61c, buf, OUTPUTLEN)) {
free(res);
free(str);
fail("[M6.01.c] Invalid string from indent(\"testifile.c\"): %s", buf);
}
free(str);
free(res);
test_complete();
}
END_TEST
あなたが最初の質問のために取得するエラーとは何ですか? valgrindの出力では、どの行にエラーが発生するかを指摘できますか(コードのどの行が116行、127行...)ですか? – Garf365
@ Garf365 'strncpy(dest + dest_offset、pad、pad_len + 1);'は116です。 'dest [dest_offset ++] = c; 'は127です。サーバーにこの関数を送信しようとすると、「戻り値1で早期終了」と表示されます。最初の質問のエラーメッセージは "Received signal:SIGABRT(Aborted)"です。メインの場合、PID 9424 " – JasonUrban
この情報を追加するために質問を編集してください。また、関数 'indent'がvalgrind出力に記述されるたびにチェックし、それぞれの行の行に関する情報を追加します。 – Garf365