尝试通过指针指针函数调用为字符串分配内存时出现分段错误

时间:2015-05-21 10:49:35

标签: c pointers file-io segmentation-fault malloc

我启动我的字符串并像这样调用我的函数:

int main() {
...
char *fileBuffer;
readFileToBuffer("/tmp/file.txt", &fileBuffer);
...
}

此函数的目的是获取file.txt的内容并将其放入fileBuffer变量中。由于file.txt的内容是动态的,因此我会在fileBuffer函数中动态分配readFileToBuffer()的内存,如下所示:

void readFileToBuffer(char *filePath, char **fileBuffer) {
...
FILE *reqFile = fopen(filePath, "r");

fseek(reqFile, 0, SEEK_END);
long fileSize = ftell(reqFile);

fseek(reqFile, 0, SEEK_SET);

*fileBuffer = malloc(fileSize + 1);

fread(fileBuffer, fileSize, 1, reqFile);
fclose(reqFile);
...
}

这会导致分段错误。我已经用Google搜索了,这似乎是在函数内部分配内存时的正确方法。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:7)

在您的readFileToBuffer()代码中,fileBuffer的类型为char **,您的功能称为readFileToBuffer("/tmp/file.txt", &fileBuffer);

然后你正确地将记忆分配给*fileBuffer []中的readFileToBuffer(),以便反映到fileBuffer 中的main()。因此,您需要将*fileBuffer传递给fread(),以便将文件的内容读入 *fileBuffer指向的内存。

你需要改变。

fread(fileBuffer, fileSize, 1, reqFile);

fread(*fileBuffer, fileSize, 1, reqFile);  // notice the *

那就是说,

  1. 始终检查malloc()的返回值是否成功。
  2. main()的推荐签名为int main(void)