"realloc(): Invalid pointer" 错误

"realloc(): Invalid pointer" error

我正在为学校编写一些代码,这是我遇到问题的代码片段:

// Create file path
int size_path = 11;
char* path = malloc(size_path*sizeof(char));
path = "./storage/[=11=]";
for(i = 0; i < size_filename; i++){
    size_path++;
    path = realloc(path, size_path*sizeof(char));
    path[size_path-1] = filename[i];
}
path[size_path] = '[=11=]';

本质上,我正在做的是试图找到一个文件的存在(例如,test.txt),所以我需要使用 access() 来检查它是否存在,但首先我需要构建 path 本身,这样 path = "./storage/test.txt" 我已经使用上面的方法解析了一些其他的东西,所以我知道我的工作方式,我只是觉得我遗漏了一些东西在这里是因为每当我尝试 运行 代码时,编译器都会出现错误:*** Error in ./a.out: realloc(): invalid pointer: 0x00000000004016c7 ***

我很想知道你们能给我提供什么见解,因为我已经研究这个错误至少半小时了,社区帮助我在几分钟内解决了很多问题,所以我敢肯定这只是一件小事,但我真的不知道它会在哪里。提前致谢!

编辑:如我所料,我在 5 分钟内得到了问题的答案。事实证明,我不小心泄漏了动态分配的内存,因为我实际上没有将任何东西放入其中并随后直接静态分配它。相反,我使用了 strcpy(path, "./storage/") 并且得到了我正在寻找的功能。谢谢!

char* path = malloc(size_path*sizeof(char));
path = "./storage/[=10=]";

所以路径指向一些动态分配的内存,然后在下一行你说 path = something_else 所以:

  1. 您泄露了动态分配的内存(因为您不再有指向它的指针,所以无法访问它free
  2. 你不能realloc非动态内存

阅读问题的字里行间,我建议您根本不需要动态内存。您可以只使用固定大小的缓冲区:

char path[128]; // arbitrary limit that we "know" is ok given our data
char* filename = "test.txt";
sprintf(path, "/storage/%s", filename);

显然,这是为假设文件名实际上可以根据某些数据而改变而量身定制的,否则整个批次可能是一个文字字符串。