gpt4 book ai didi

不能在另一个函数中由 malloc() 分配 free() 值

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

我有一个 C 函数,像这样:

void foo(char ** out) {
*out = malloc(computedsize);
if(*out != NULL){
sprintf(*out, "%s,%s", foovar, baa);
}
}

然后我调用:

int main(void) {
char * out = NULL;
foo(&out);
printf("%s\n", out); /* so far, it works fine */
free(out); /* the problem. */
}

当我打电话时:

自由(出);

它给出了:

*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09a03050 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b161)[0x4ff161]
/lib/tls/i686/cmov/libc.so.6(+0x6c9b8)[0x5009b8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x503a9d]
./a.out[0x804875b]
./a.out[0x804871a]
./a.out[0x80486f9]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x4aabd6]
./a.out[0x8048601]
======= Memory map: ========

//是否需要复制内存映射部分?

谁能指出我的错误?我相信那是 sprintf() 调用.. 或者不是,实际上,我不知道。我也尝试在函数分配值中为它创建一个新变量,然后 *out = myvariable;*out = strdup(myvariable)free( ) 调用给出同样的错误。

更新

我发现问题出在函数内部。在其中调用任何 free(),都会导致下一个尺寸无效。

例如:

char *f=malloc(2);
strcpy(f,"a");
free(f);

foo() 函数中,出现上述错误,在main() 函数中,正常运行。我完全不知道如何解决这个问题。

最佳答案

您可能已经超出了分配数组的范围,从而破坏了堆(其中包含 malloc/free 用于管理事物的元数据)。

Valgrind 等工具旨在帮助您发现此类错误。

关于不能在另一个函数中由 malloc() 分配 free() 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339547/

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