【问题标题】:Realloc returns NULL but Why?Realloc 返回 NULL 但为什么呢?
【发布时间】:2021-04-25 03:36:10
【问题描述】:

我和动态记忆不是朋友。我总是对他们有问题。而且这个任务很容易理解。

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

【问题讨论】:

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


    【解决方案1】:

    函数readText 返回一个局部变量的地址。你不能realloc内存不是由malloc(或calloc,或strdup等)获得的,函数readText的局部变量肯定不是从malloc获得的。所以realloc 失败了。

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多