c-Cunit测试两次空闲内存



对不起,我知道我不应该释放()两次指针,但我如何检查是否还没有释放?检查是否为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"标签?

相关内容

最新更新