【发布时间】:2015-05-21 10:49:34
【问题描述】:
我启动我的字符串并像这样调用我的函数:
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);
...
}
这会导致分段错误。我搜索了一下,这似乎是在函数内部分配内存时的正确方法。
知道为什么会这样吗?
【问题讨论】:
-
使用 valgrind 和 gdb,并发布您的调试信息
-
再看看
fread的电话。
标签: c pointers file-io segmentation-fault malloc