Realloc 返回 NULL 但为什么?

时间:2021-01-20 18:07:28

标签: c null malloc dynamic-memory-allocation realloc

我和动态记忆不是朋友。我总是遇到他们的问题。而且任务很容易理解。

任务:编写一个函数 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 问题。会很棒 感谢您查看并帮助我改进。

1 个答案:

答案 0 :(得分:2)

函数 readText 返回局部变量的地址。您不能realloc不是由malloc(或calloc,或strdup等)获得的内存,并且来自函数readText的局部变量是当然不是从 malloc 获得的。所以 realloc 失败了。

相关问题