我有一个具体问题:当我尝试使用我自己的函数将文件加载到内存时遇到问题。
load_file_on_memory()
接收一个文件名和一个指针。它只是打开文件,为文件内容动态分配内存并填充它,然后使用 destiny
作为参数将指针传递给调用者。
但我有一个问题:在 load_file_on_memory()
函数中,我在 malloc
内容空间上取得了成功。我也可以将数据放在指针上并获取它。
当我尝试在函数外部使用指针时,调用者只会得到垃圾。我将(很快)在这里发布我的代码。
我不明白为什么会这样。我正在使用带有 Tiny C 编译器的 Windows 7。不知道那个环境会不会出错。
这是我的来源
#include <stdio.h>
#include <stdlib.h>
int load_file_on_buffer(char filename[], void *buffer_destiny){
FILE *file_loaded;
unsigned int file_size;
file_loaded = fopen(filename, "rb");
if(file_loaded == NULL)
return -1;
fseek(file_loaded, 0, SEEK_END);
file_size = ftell(file_loaded);
fseek(file_loaded, 0, SEEK_SET);
buffer_destiny = (void *) malloc(file_size);
fread((char *) buffer_destiny, file_size, 1, file_loaded);
printf("BEGIN DEBUG FILE\n");
printf("%s", buffer_destiny);
printf("\n\nEND DEBUG FILE\n");
fclose(file_loaded);
return 0;
}
int main(int argc, char *argv[]){
char *buffered_input_file;
///First, load input file
if(load_file_on_buffer("test.txt", (void *)buffered_input_file) != 0)
return -1;
printf("Input file loaded successfully\n");
printf("This function must print file content: \n\n");
printf("%s", buffered_input_file);
}
最佳答案
您正在传递参数 void* buffer_destiny。一旦进入函数,这只是一个普通变量。您使用 malloc () 调用覆盖它。这对调用函数没有影响。而是将函数声明为
int load_file_on_buffer(char filename[], void **pbuffer_destiny)
称之为
void* buffered_input_file;
load_file_on_buffer("test.txt", &buffered_input_file)
并在函数中写入
void* buffer_destiny = malloc (...);
*pbuffer_destiny = buffer_destiny;
关于c - 函数 malloc 一个指针并将数据读入其中,但调用者无法访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672536/