我正在学习C,在特定的代码中,我为一个字符数组分配了一个命令行参数,该数组的内存是动态分配的。
char *ptr;
ptr=(char *)malloc(500*sizeof(char));
ptr=argv[argc-2];在完成代码和释放内存之后
free(ptr);我搞错了
*** Error in `./a': free(): invalid pointer: 0x00007fff00c0c604 ***有人能帮我吗?我的错误在哪里?
发布于 2022-02-27 08:45:14
有一些误解。
“我为字符数组分配了一个命令行参数”。
ptr=argv[argc-2];
不,你没有。您将指针的值(指向命令行参数中的字符序列)分配给了指针变量(丢失了以前存储在那里的错误内存的指针)。
“在完成代码后.释放内存”
free(ptr);
不完全是,您所做的是在一个指针上调用free(),而该指针以前没有被错误定位(因为之前的错误丢失了它)。
这就是对所发生的事情的解释。
退役忍者的评论暗示了一个解决方案,不过我建议使用strncpy()将命令行参数复制到您已分配的内存中。它保持指向已分配内存的指针(而不是覆盖它),这反过来允许稍后释放它。
https://stackoverflow.com/questions/71283046
复制相似问题