gpt4 book ai didi

c - realloc 与 free 一起使用

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

我正在尝试使用 realloc 函数将输入字符存储在动态数组中。当我使用它而不调用 free 方法来释放使用后的内存时,一切都很好。但是当我将它与免费方法一起使用时,会出现运行时错误。这是我的代码片段。

int main(){  
char *message ;
int len = 0 ;
char c ;
while((c=getchar()) != '\n'){
message = realloc(message,(len+1)*sizeof(char)) ;
message[len++] = c ;
}
message = realloc(message, (len+1)* sizeof(char));
message[len]='\0' ;
printf("Message is %s\n",message);
free(message) ;
return 0 ;
}

谁能想出这个。因为我需要同时使用这两种方法..谢谢!!!!

最佳答案

虽然它可能不会导致您看到的问题,但 X = realloc(X, newsize); 是一颗等待爆炸的定时炸弹。如果 realloc 未能分配您请求的新 block ,它可以返回空指针并保持现有数据不变。当/如果这样做,这将用 NULL 覆盖现有指针,泄漏您之前分配的内存(并且无法分配更多内存)。

虽然它可能也不会导致问题,但我也(强烈)建议不要使用 realloc 一次增加一个字符的分配。那是非常低效的。我会从一个 block 开始,比如说,32 或 64 个字符,每次空间用完时,将分配增加一些因素(比如 1.5)。通过这种方式,您可以处理截然不同的输入长度,而无需大量调用 realloc。

编辑:看看它,真正的问题可能是您在初始调用 realloc 之前没有正确初始化您的指针。如果您传递的不是 NULL 指针,它希望您传递的是从 malloc/calloc 或之前调用 获得的有效指针重新分配

int main(){  
char *message ;
int len = 0 ;
char c ;
while((c=getchar()) != '\n'){
message = realloc(message,(len+1)*sizeof(char)) ;
message[len++] = c ;
}
message = realloc(message, (len+1)* sizeof(char));
message[len]='\0' ;
printf("Message is %s\n",message);
free(message) ;
return 0 ;
}

至少对我来说,它运行时没有任何错误消息。

关于c - realloc 与 free 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148232/

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