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是动态的,我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);
...
}
Run Code Online (Sandbox Code Playgroud)
这导致了分段错误.我已经用Google搜索了,这似乎是在函数内部分配内存时的正确方法.
知道为什么会这样吗?
在你的readFileToBuffer()代码中,fileBuffer是类型char **,你的函数被称为readFileToBuffer("/tmp/file.txt", &fileBuffer);
那么你已经正确分配的内存*fileBuffer中readFileToBuffer()[ 使得被反射到fileBuffer的main().因此,您需要传递*fileBuffer以fread()将文件的内容读入指向的内存中*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)
那说,
malloc()成功的返回值.main()是int main(void).| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |