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

Ada*_*ate 2 c malloc file-io pointers segmentation-fault

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

int main() {
...
char *fileBuffer;
readFileToBuffer("/tmp/file.txt", &fileBuffer);
...
}
Run Code Online (Sandbox Code Playgroud)

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

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);
...
}
Run Code Online (Sandbox Code Playgroud)

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

知道为什么会这样吗?

Sou*_*osh 7

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

那么你已经正确分配的内存*fileBufferreadFileToBuffer()[ 使得被反射到fileBuffermain().因此,您需要传递*fileBufferfread()将文件的内容读指向的内存中*fileBuffer.

你需要改变.

fread(fileBuffer, fileSize, 1, reqFile);
Run Code Online (Sandbox Code Playgroud)

fread(*fileBuffer, fileSize, 1, reqFile);  // notice the *
Run Code Online (Sandbox Code Playgroud)

那说,

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