gpt4 book ai didi

Cunit 测试可用内存两次

转载 作者:行者123 更新时间:2023-11-30 19:47:50 25 4
gpt4 key购买 nike

对不起,我知道我不应该 free() 两次指针,但是我如何检查指针是否尚未释放?检查是否为空?我不知道,因为有人告诉我 free() 命令不会在内存中写入 null,而只是释放空间!帮助 !!非常感谢!

void buffer_destroy(buffer_t* buffer){
if(buffer==NULL){
return ;
}

int i;
if(buffer->size>0){


for(i=0;i<buffer->size;i++){
msg_destroy_string(buffer->array_msg[i]);

}

}
free(buffer->array_msg);
free(buffer);

实际上我在 buffer.c 中有一个线程,它启动一个函数并以名为“buffer”的指针作为参数。然后我在这个线程上调用 pthread_join 但我不知道是否自动在他的启动时传递所有参数(在在这种情况下,这个称为“缓冲区”的指针)将是 free()。因为在第二个时刻,双重 free() 调用出现了错误/异常,所以可能在线程末尾自动调用了第一个 free,因为我使用“缓冲区”作为参数?

最佳答案

正如托尼所说,你的逻辑可能有漏洞。最好的答案是重写你的代码。

请注意,我不是 C 专家,但如果您出于某种原因无法更改代码,那么也许您可以尝试以下操作:
- 添加变量“hasBeenFree = FALSE”(可能是全局变量或函数的参数)
- 并在调用free之前对其进行测试:

if (!hasBeenFree) {
free(buffer);
hasBeenFree = TRUE;
}

但我希望有经验的人可以回答你。

为什么要标记“cunit”?

关于Cunit 测试可用内存两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315132/

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