gpt4 book ai didi

C - 自由()错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:31 25 4
gpt4 key购买 nike

这是我正在调试的函数:

boolean
adin_memory(char* buffer, int size_chunck, int end_flag){
global_buffer = mymalloc(size_chunck*sizeof(char)); //3
global_buffer = buffer;

real_data= (SP16 *)mymalloc(size_chunck*sizeof(SP16)); //3
memcpy(real_data,global_buffer,size_chunck);

free(global_buffer); //ERROR

pos_escrita += size_chunck;

global_size = size_chunck;
global_end_flag = end_flag;
return TRUE;
}

这是 mymalloc 函数:

void *
mymalloc(size_t size)
{
void *p;
if ( (p = malloc(size)) == NULL) {
#if defined(_WIN32) && !defined(__CYGWIN32__)
jlog("Error: mymalloc: failed to allocate %Iu bytes\n", size);
#else
jlog("Error: mymalloc: failed to allocate %zu bytes\n", size);
#endif
*((char*)0) = 0 ; //###ARL provoca um exception
exit(1);
}
return p;
}

调用 free() 函数时出现此错误。为什么? enter image description here

最佳答案

我看到的问题:

global_buffer = mymalloc(size_chunck*sizeof(char)); //3
global_buffer = buffer;

这会导致内存泄漏。 mymalloc 返回的值现已丢失。

real_data= (SP16 *)mymalloc(size_chunck*sizeof(SP16));  //3
memcpy(real_data,global_buffer,size_chunck);

free(global_buffer); //ERROR

这将是一个问题,具体取决于 buffer 的定义方式。上面的语句等价于:

free(buffer);

如果不了解函数的调用方式,很难说出为什么这是一个错误。如果不了解大局,就很难提出应该更改的建议。更具体地说,不清楚您为什么需要使用:

global_buffer = buffer;

关于C - 自由()错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221694/

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