对不起,我知道我不应该释放两次指针,但我怎么能检查它是否已经免费?检查是否为空?我不知道有人告诉我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.ca线程,它启动一个函数,并将一个名为“buffer”的指针作为参数。然后我在这个线程上调用一个pthread_join,但我不知道是否自动在启动时传递所有参数(在这种情况下,这个名为“buffer”的指针将是free()。 因为在第二个时刻它在double free()调用中出现了错误/异常,所以可能在线程结束时自动调用了第一个free,因为我使用“buffer”作为参数?
答案 0 :(得分:0)
正如托尼所说,可能你的逻辑上有漏洞。最好的答案是重做代码。
请注意,我不是C专家,但如果您因任何原因无法更改代码,那么也许您可以尝试以下方法:
- 添加变量“ hasBeenFree = FALSE ”(可能是全局变量或函数的参数)
- 在致电免费之前测试它:
if (!hasBeenFree) {
free(buffer);
hasBeenFree = TRUE;
}
但我希望有经验的人能回答你。
为什么要标记“cunit”?