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

Segmentation fault when trying to allocate memory for a string via a pointer-to-pointer function call

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

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

这个函数的作用是获取file.txt的内容,放入fileBuffer变量中。因为 file.txt 的内容是动态的,所以我在 readFileToBuffer() 函数中为 fileBuffer 动态分配内存,如下所示:

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);
...
}

这导致了分段错误。我用谷歌搜索了一下,这似乎是在函数内部分配内存的正确方法。

知道为什么会这样吗?

在您的 readFileToBuffer() 代码中,fileBuffer 的类型为 char ** 并且您的函数被称为 readFileToBuffer("/tmp/file.txt", &fileBuffer);

那么你已经正确地将内存分配给 readFileToBuffer() 中的 *fileBuffer [ 所以这会反映到 main()[=41 中的 fileBuffer =]].因此,您需要将 *fileBuffer 传递给 fread() 以将文件 的内容读取到 *fileBuffer.

指向的内存中

你需要改变。

fread(fileBuffer, fileSize, 1, reqFile);

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

也就是说,

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