gpt4 book ai didi

c - malloc 无法分配内存 + 不发出警告

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

  char *str=NULL;
strsave(s,str,n+1);
printf("%s",str-n);

当我用 gdb 调试这段代码时,我发现 str 值为 0x0,它是 null,而且我的代码没有捕捉到这个失败的内存分配,它没有执行 str==NULL 错误代码......任何想法

 void strsave(char *s,char *str,int n)
{
str=(char *)malloc(sizeof(char)* n);
if(str==NULL)
perror("failed to allocate memory");
while(*s)
{
*str++=*s++;
}
*str='\0';
}

最佳答案

您的代码存在的问题是您将指向已分配内存的指针分配给 str副本。函数内部的 str 是一个局部变量,它与您在调用期间传递给 strsave 的变量位于不同的内存地址。

为了改变 str 指向的位置,您需要传递一个指向 char 的指针来解决这个问题。

void strsave(char *s,char **str,int n)

另一种选择是返回指向新分配的字符串的指针。

但是,最好的解决方案是在调用strsave 之前分配内存并将有效指针传递给strsave。当同一模块/层或函数负责特定资源的分配和释放时,更容易跟踪内存分配。

关于c - malloc 无法分配内存 + 不发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208514/

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