を使用している場合valgrindのを使用しているとき、私はこの出力を取得しています:無効読み取りvalgrindの
else
{
currentList = headList;
printf("This is where I will put the code to create the Linked list!\n");
if(currentList != 0)
{
while(currentList->nextList != 0)
{
if(currentList->key = key)
{
asprintf(&buff, "%s %s", currentList->value, dirValue); // PROBLEM IS HERE
printf("Here is the new string that holds the directory paths: %s\n", buff);
currentList->value = buff;
free(buff);
printf("Here is the new string that holds the directory paths: %s\n", currentList->value);
return;
}
currentList = currentList->nextList;
}
currentList->nextList = malloc(sizeof(struct List));
printf("Adding a new node\n");
//Reached the end of the Linked list and didn't find the
//same key so create a new node.
currentList = currentList->nextList;
currentList->key = key;
currentList->nextList = NULL;
currentList->value = dirValue;
}
}
:私は自分のコードに問題があることに、それを絞られているのはここ
==19923== Invalid read of size 1
==19923== at 0x52CCCC0: vfprintf (vfprintf.c:1632)
==19923== by 0x52F4772: vasprintf (vasprintf.c:59)
==19923== by 0x52D3A56: asprintf (asprintf.c:35)
==19923== by 0x400D77: addToList (pa1.c:124)
==19923== by 0x4010AF: md5Hash (pa1.c:220)
==19923== by 0x401138: newFile (pa1.c:244)
==19923== by 0x401260: searchDirects (pa1.c:280)
==19923== by 0x401451: main (pa1.c:339)
==19923== Address 0x585b720 is 0 bytes inside a block of size 27 free'd
==19923== at 0x4C2EDEB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19923== by 0x401144: newFile (pa1.c:246)
==19923== by 0x401260: searchDirects (pa1.c:280)
==19923== by 0x401382: directoryCheck (pa1.c:312)
==19923== by 0x4012CD: searchDirects (pa1.c:290)
==19923== by 0x401451: main (pa1.c:339)
==19923== Block was alloc'd at
==19923== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==19923== by 0x52F47D7: vasprintf (vasprintf.c:73)
==19923== by 0x52D3A56: asprintf (asprintf.c:35)
==19923== by 0x40112C: newFile (pa1.c:239)
==19923== by 0x401260: searchDirects (pa1.c:280)
==19923== by 0x401382: directoryCheck (pa1.c:312)
==19923== by 0x4012CD: searchDirects (pa1.c:290)
==19923== by 0x401451: main (pa1.c:339)
があります私は多くのエラーがあり、valgrindの出力全体を提供することは、私が過度の気持ちになるだろう。 asprintf()("addToList (pa1.c:124)" line in the report)
を使用している場所に戻ってくるすべてのエラー。コードの上に私はchar *buff = NULL;
を初期化し、currentList->value
はasprintfを使って追加したい文字列を保持しています。何故、私が何度も無効な読込みサイズ1のエラーが発生していると推測されます。また、asprintf()から結果をプリントアウトするときに、文字列が期待どおりに追加されます。
正確なエラーが発生するかどうかは不明ですが、if(currentList-> key = key) 'にする必要があります。 ' – kaylum
valgrindエラーは、解放されたメモリ。 – melpomene
'currentList-> value = buff;フリー(バフ); '?リンクされているものの割り当てを解除することは、少なくとも重大な論理エラーであるようです。 –