对不起,我知道我不应该释放()两次指针,但我如何检查是否还没有释放?检查是否为null?我不知道,因为有人告诉我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,但我不知道在他启动时传递的所有参数(在这种情况下,这个名为"buffer"的指针)是否都是free()。因为在第二刻,它在double free()调用上出现了一个错误/异常,所以很可能在线程结束时自动调用了第一个free,因为我使用了"buffer"作为参数?
正如Tony所说,您的逻辑可能有漏洞。最好的答案是重新编写代码。
请注意,我不是C方面的专家,但如果你因为任何原因无法更改代码,那么也许你可以尝试以下操作:
-添加变量"hasBeenFree=FALSE"(可能是全局变量或函数的参数)
-并在调用免费:之前对其进行测试
if (!hasBeenFree) {
free(buffer);
hasBeenFree = TRUE;
}
但我希望有更多经验的人能回答你。
为什么贴"cunit"标签?