首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么向动态分配的数组分配命令行参数会显示错误

为什么向动态分配的数组分配命令行参数会显示错误
EN

Stack Overflow用户
提问于 2022-02-27 07:51:39
回答 1查看 38关注 0票数 0

我正在学习C,在特定的代码中,我为一个字符数组分配了一个命令行参数,该数组的内存是动态分配的。

代码语言:javascript
复制
       char *ptr;
       ptr=(char *)malloc(500*sizeof(char));
       ptr=argv[argc-2];

在完成代码和释放内存之后

代码语言:javascript
复制
free(ptr);

我搞错了

代码语言:javascript
复制
*** Error in `./a': free(): invalid pointer: 0x00007fff00c0c604 ***

有人能帮我吗?我的错误在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-27 08:45:14

有一些误解。

“我为字符数组分配了一个命令行参数”。

ptr=argv[argc-2];

不,你没有。您将指针的值(指向命令行参数中的字符序列)分配给了指针变量(丢失了以前存储在那里的错误内存的指针)。

“在完成代码后.释放内存”

free(ptr);

不完全是,您所做的是在一个指针上调用free(),而该指针以前没有被错误定位(因为之前的错误丢失了它)。

这就是对所发生的事情的解释。

退役忍者的评论暗示了一个解决方案,不过我建议使用strncpy()将命令行参数复制到您已分配的内存中。它保持指向已分配内存的指针(而不是覆盖它),这反过来允许稍后释放它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71283046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档