如何解决Realloc 返回 NULL 但为什么?
我和动态记忆不是朋友。我总是遇到他们的问题。而且任务很容易理解。
任务:编写一个函数 readText 从用户处读取任意文本(通过返回完成)并将其作为字符串返回。在该函数的第一个版本中,假设文本长度不能超过特定长度(例如 1000 个字符)。阅读完文本后,应将内存缩短到所需的最小长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXC 5
char *readText(int*lengh);
int main()
{
char *str= malloc(MAXC*sizeof(char));
if(str == NULL) {
printf("Kein virtueller RAM mehr verfügbar ...\n");
return EXIT_FAILURE;
}
int length=0;
str=readText(&length);
printf("Text: %s %d %c\n",str,length,*str);
str= realloc(str,length+1);
if(str == NULL) {
printf("Kein virtueller RAM mehr verfügbar ...\n");
return EXIT_FAILURE;
}
printf("Text: %s\n",str);
free(str);
printf("free\n");
return 0;
}
char *readText(int*lengh){
char *result1;
char result[MAXC];
printf("Read Text: ");
scanf("%s",&result);
result1=result;
*lengh=strlen(result);
return result1;
}
结果(字符串的事情刚刚发生在不久之前,之前我只对 realloc 有问题):
Read Text: hoi
Text: h╠ ` 3 h
Kein virtueller RAM mehr verf³gbar ... (No virtual RAM available)
Process returned 1 (0x1)
我担心的是我的程序没问题,但我的 RAM 不行。因此,如果是这种情况或一般情况下,请告诉我如何修复 RAM 问题。会很棒 感谢您查看并帮助我改进。
解决方法
函数 readText
返回局部变量的地址。您不能realloc
不是由malloc
(或calloc
,或strdup
等)获得的内存,并且来自函数readText
的局部变量是当然不是从 malloc
获得的。所以 realloc
失败了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。