繁体   English   中英

“ realloc():无效的指针”错误

[英]“realloc(): Invalid pointer” error

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

// Create file path
int size_path = 11;
char* path = malloc(size_path*sizeof(char));
path = "./storage/\0";
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] = '\0';

本质上,我正在尝试查找文件的存在(例如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/\0";

因此,path指向一些动态分配的内存,然后在下一行中,您说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);

显然,这是为了假设文件名实际上可以基于某些数据而更改而设计的,否则整个文件可能是一个文字字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM