gpt4 book ai didi

c - 空闲动态内存获取错误

转载 作者:行者123 更新时间:2023-12-05 01:28:07 25 4
gpt4 key购买 nike

我遇到了释放动态内存的问题。我已经运行了其他人的示例代码,并且成功了。关键是我们使用相同的方法来释放内存,但我的方法不起作用。它总是出现一个错误

"CRT detected that the application wrote to memory after end of heap buffer. "

谁能帮我理解发生了什么?

void pop(Stackptr *ptr){
Stackptr tmp = NULL;
if(*ptr == NULL){
printf("there is no element\n");
}else{
tmp = *ptr;
*ptr= (*ptr)->nextptr;
free(tmp);
}
}

最佳答案

如我所见,错误是

 tmp = *ptr;

您希望指针本身存储在 tmp 中,而不是值。

因此,下一个 free(tmp); 变得非法,因为您传递的指针是无效。在 malloc() 和 family 之前未返回的指针上调用 free() 或已经 free()-d,调用 undefined behavior

也就是说,if(*ptr == NULL) 应该是 if(ptr == NULL),以检查指针的 N​​ULL 值。

故事的寓意:启用编译器警告。尝试修复编译器发出警告的问题。

关于c - 空闲动态内存获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com