【发布时间】:2017-09-16 11:54:08
【问题描述】:
我正在为学校编写一些代码,这是我遇到问题的代码片段:
// 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/"),我得到了我正在寻找的功能。谢谢!
【问题讨论】:
-
阅读How to Ask,特别是关于homework questions的部分。
-
path = "./storage/\0";分配了刚刚用char* path = malloc(size_path*sizeof(char));初始化的path,这会泄露之前的分配。 -
大概
path = "./storage/\0";应该是strcpy(path, "./storage/"); -
strcpy(path, "./storage/");效果与strcpy(path, "./storage/\0");相同 -
realloc(path, size_path*sizeof(char));对于最终的path[size_path] = '\0';来说太小了