[英]“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
这样:
free
它) 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.