使用 realloc 时出现问题 - 未获得预期的内存量

问题描述 投票:0回答:1

第一次提问,请多多指教:)

我必须编写一个程序,能够接收成绩文件,读取它们,然后提供一些选项来编辑该文件。我决定用 C 语言编写它(为了挑战,并了解更多关于 C 的知识)。我有一个函数,它接收一个指针,然后打开一个文件并将该文件中的字符加载到该指针提供的内存中。

我遇到的问题是使用 realloc 获得足够大的列表大小以加载文件。我目前只是加载填充大小。

供参考: 将数据从文件加载到列表的功能。

void loadFile(char **fileContents) {
  printf("%d\n", *fileContents);
  *fileContents = realloc(*fileContents, 200);
  printf("%d\n", *fileContents);
  printf("%d\n", sizeof *fileContents);
}

选择各种选项来编辑该列表的功能(也在声明

fileContents
的地方)。

void menu() {
  char *fileContents = malloc(sizeof(char) * 20);
  if (fileContents == NULL) {
    puts("memory failed to initialize");
  }

  loadFile(&fileContents);

  printf("%s\n", fileContents);

  free(fileContents);
}

我原本期望在

loadFile
函数中得到最后一个打印语句的大小 200,但结果却是 4。非常感谢所有答案!!!

c malloc realloc
1个回答
0
投票

loadFile
函数中,
fileContents
是一个指针。显然,在您的系统上,指针是 32 位或 4 字节。

malloc
calloc
realloc
返回的指针不携带任何有关分配了多少数据的信息。它只是指向该内存块开头的指针。

进一步说明,不能保证这些功能会成功。您应该进行测试以确保它们确实如此。如果失败,您可以打印错误并退出或尝试恢复。

但是,为了使用

realloc
执行此操作,您需要首先将结果分配给临时变量。如果在您的情况下失败,则
*fileContents
指向的内存将不再有指向它的指针。这可能导致内存泄漏,因为我们无法再
free
它。

© www.soinside.com 2019 - 2024. All rights reserved.