"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
所以:
- 您泄露了动态分配的内存(因为您不再有指向它的指针,所以无法访问它
free
)
- 你不能
realloc
非动态内存
阅读问题的字里行间,我建议您根本不需要动态内存。您可以只使用固定大小的缓冲区:
char path[128]; // arbitrary limit that we "know" is ok given our data
char* filename = "test.txt";
sprintf(path, "/storage/%s", filename);
显然,这是为假设文件名实际上可以根据某些数据而改变而量身定制的,否则整个批次可能是一个文字字符串。
我正在为学校编写一些代码,这是我遇到问题的代码片段:
// 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
所以:
- 您泄露了动态分配的内存(因为您不再有指向它的指针,所以无法访问它
free
) - 你不能
realloc
非动态内存
阅读问题的字里行间,我建议您根本不需要动态内存。您可以只使用固定大小的缓冲区:
char path[128]; // arbitrary limit that we "know" is ok given our data
char* filename = "test.txt";
sprintf(path, "/storage/%s", filename);
显然,这是为假设文件名实际上可以根据某些数据而改变而量身定制的,否则整个批次可能是一个文字字符串。