Free()返回的char指针不会将其从内存中删除?

rze*_*erg 1 c malloc memory-management

基本上问题归结为:

我加载一个文件,将所有每个字符写入一个char*变量,该变量具有malloc()文件的长度.然后我返回该变量并打印它,然后我释放()该变量的内存,并尝试再次打印该打印它的变量.

我对C很新,所以我处理保存文本内容的变量的内存可能有些不对劲.

我尝试使用char [(ftell(file)]而不是malloc和char*,但是函数没有返回任何内容.这可能是因为它是一个局部变量,当函数返回时会被释放,对吧?

这是我的代码的样子:

main.c中:

#include <stdio.h>
#include <stdlib.h>
#include "data/filesystem/files.h"

int main(){
    char *filebuffer = retrieve_file_content("assets/test.txt");
    printf("%s", filebuffer);
    free(filebuffer);
    printf("%s", filebuffer);
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

files.c:

#include <stdio.h>
#include <stdlib.h>

char *retrieve_file_content(char* path){
    FILE *file;
    file = fopen(path, "r");
    if(file){
        fseek(file, 0L, SEEK_END);
        char *filebuffer = malloc(ftell(file));
        if(filebuffer == NULL){ return NULL; }
        fseek(file, 0L, SEEK_SET);
        int i = 0;
        int buffer = getc(file);
        while(buffer != EOF){
            filebuffer[i] = buffer;
            buffer = getc(file);
            i++;
        }
        fclose(file);
        return filebuffer;
    }else{
        return NULL;
    }
}
Run Code Online (Sandbox Code Playgroud)

的test.txt:

heheasdasdas
Run Code Online (Sandbox Code Playgroud)

输出:

heheasdasdas
heheasdasdas
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Arm*_*yan 10

free只标记有问题的内存可以自由再次分配,这意味着它可以被重用.但它没有将释放的内存设置为任何值.您的示例是所谓的UB(未定义行为).具有未定义行为的程序在技术上可以做任何事情 - 包括错误/奇怪的行为,良好的行为,或通过Skype订购比萨饼:)

  • 接受教育学解释和+1笑话:) (2认同)