我和动态记忆不是朋友。我总是遇到他们的问题。而且任务很容易理解。
任务:编写一个函数 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 问题。会很棒 感谢您查看并帮助我改进。
答案 0 :(得分:2)
函数 readText
返回局部变量的地址。您不能realloc
不是由malloc
(或calloc
,或strdup
等)获得的内存,并且来自函数readText
的局部变量是当然不是从 malloc
获得的。所以 realloc
失败了。