提问人:Cindy_ l 提问时间:10/24/2023 最后编辑:Cindy_ l 更新时间:10/24/2023 访问量:61
我已经释放了动态分配的内存,但我仍然遇到内存泄漏
I have free'd dynamically allocated memory, but I am still getting memory leaks
问:
我目前正在用 C 语言进行作业,并且我已经动态分配了我的结构、linkedlist 和一个 2d 数组。在代码的末尾,我也释放了这些内容。我无法显示我的所有代码,因为它是一项作业,可能更难查看问题。不过,我可以提供代码片段。
下面是我的 linkedlist 的 insertStart
void insertStart(LinkedList* list, void* entry)
{
Position* temp;
void* newEntry = malloc(sizeof(Position));
ListNode* newNd = (ListNode*)malloc(sizeof(ListNode));
temp = (Position*)entry;
memcpy(newEntry, entry, sizeof(Position));
newNd->data = newEntry;
newNd->next = list->head;
list->head = newNd;
list->size++;
}
在这种方法中,我已经对newNd进行了恶意定位,但我无法释放,因为它会导致分段错误。
我尝试使用 valgrind 来检查内存泄漏,这就是我得到的。
==1906==
==1906== HEAP SUMMARY:
==1906== in use at exit: 1,332 bytes in 40 blocks
==1906== total heap usage: 72 allocs, 32 frees, 14,676 bytes allocated
==1906==
==1906== 60 bytes in 3 blocks are indirectly lost in loss record 1 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA1B: insertStart (linkedList.c:23)
==1906== by 0x1099DA: controls (game.c:141)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 60 bytes in 3 blocks are indirectly lost in loss record 2 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA1B: insertStart (linkedList.c:23)
==1906== by 0x109811: controls (game.c:111)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 72 bytes in 3 blocks are indirectly lost in loss record 3 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA29: insertStart (linkedList.c:24)
==1906== by 0x1099DA: controls (game.c:141)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 72 bytes in 3 blocks are indirectly lost in loss record 4 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA29: insertStart (linkedList.c:24)
==1906== by 0x109811: controls (game.c:111)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 120 bytes in 6 blocks are indirectly lost in loss record 5 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA1B: insertStart (linkedList.c:23)
==1906== by 0x1098F8: controls (game.c:126)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 140 bytes in 7 blocks are indirectly lost in loss record 6 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA1B: insertStart (linkedList.c:23)
==1906== by 0x109AC1: controls (game.c:156)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 144 bytes in 6 blocks are indirectly lost in loss record 7 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA29: insertStart (linkedList.c:24)
==1906== by 0x1098F8: controls (game.c:126)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 168 bytes in 7 blocks are indirectly lost in loss record 8 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10AA29: insertStart (linkedList.c:24)
==1906== by 0x109AC1: controls (game.c:156)
==1906== by 0x109596: game (game.c:44)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== 472 bytes in 1 blocks are still reachable in loss record 9 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x48DF64D: __fopen_internal (iofopen.c:65)
==1906== by 0x48DF64D: fopen@@GLIBC_2.2.5 (iofopen.c:86)
==1906== by 0x109347: main (main.c:26)
==1906==
==1906== 860 (24 direct, 836 indirect) bytes in 1 blocks are definitely lost in loss record 10 of 10
==1906== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1906== by 0x10A9D1: createLinkedList (linkedList.c:11)
==1906== by 0x1094DC: game (game.c:30)
==1906== by 0x109455: main (main.c:59)
==1906==
==1906== LEAK SUMMARY:
==1906== definitely lost: 24 bytes in 1 blocks
==1906== indirectly lost: 836 bytes in 38 blocks
==1906== possibly lost: 0 bytes in 0 blocks
==1906== still reachable: 472 bytes in 1 blocks
==1906== suppressed: 0 bytes in 0 blocks
==1906==
==1906== For lists of detected and suppressed errors, rerun with: -s
==1906== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
如果需要更多代码,请告诉我,我会看看我能提供多少,谢谢!
答: 暂无答案
评论
loc = findLoc('P', arr, row, col);
,例如,重新分配已为“d...这不可能是健康的......代码太少,无法多说...(指针也一样......malloc()
carloc