在 C 中使用 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
返回的指针不携带任何有关分配了多少数据的信息。它只是指向该内存块开头的指针。

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