c - 函数 malloc 一个指针并将数据读入其中,但调用者无法访问它

标签 c windows file pointers

我有一个具体问题:当我尝试使用我自己的函数将文件加载到内存时遇到问题。

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/

相关文章:

c - 从调试符号获取变量的堆栈偏移量

c - 为什么 scanf 会导致我的代码无限期运行?

c# - 在 Compact Framework 中设置 LastWriteTime

java - Eclipse启动和ant启动以不同的编码生成文件

python - React 和 Python 应用程序的下载文件功能

c - 汇编程序中的循环迭代不正确

python - CPython - 在主线程中锁定 GIL

c++ - codecvt_utf8<wchar_t> 被转换为原生 codecvt<wchar_t, char>

windows - 返回文件路径的批处理脚本

windows - GetFinalPathNameByHandle 对于设备句柄失败