c - 如何使结构内的指针指向另一个指针指向的相同字符串?
问题描述
我有以下代码:
struct el{
char *line;
struct el *next;
};
struct el *abc, def;
char *p1;
char buffer[100];
abc = &def;
gets(buffer);
p1 = malloc(strlen(buffer) + 1 );
strcpy( p1, buffer);
如何在不分配相同字符串两次的情况下line
指出指向的相同字符串?p1
写够了吗:
abc->line = p1;
还是我还需要释放 指向的区域p1
?
解决方案
我感觉到有异味...也就是说,您的所有变量似乎都是局部变量(在堆栈上),当您的函数返回时它们不再存在。
你的功能也会以
return abc;
然后你失去了一切,因为你说abc= &def;
,def
也是一个局部变量。所以是的,你可以简单地做,abc->line= p1;
但是在返回之后你丢失了abc
(指向def
哪个堆栈变量,然后不再存在),因此你也丢失了abc->line
,所以你有内存泄漏。
因此,您应该扩展您向我们展示的代码,以便我们能够说“是的,您可以这样做”。
以下是错误函数的示例:
struct el{
char *line;
struct el *next;
};
struct el *example(void)
{
struct el *abc, def; // def is a local variable
char *p1;
char buffer[100];
abc = &def;
gets(buffer);
p1 = malloc( strlen(buffer) + 1 );
strcpy( p1, buffer);
abc->line= p1;
return abc; // def won't exist anymore after the function returns
}
要修复此错误,您还应该执行abc= malloc(sizeof(struct el));
或将指针变量传递给函数,例如:
void example2(struct el *abc)
{
char *p1;
// ...
abc->line= p1;
}
并调用例如:
int main(void)
{
struct el pqr = {0};
example2(&pqr);
// ...
}
推荐阅读
- typo3 - Extbase 删除控制器/存储库中的重复对象
- postgresql - PostgreSQL 导出表 .csv 作为当前日期
- javascript - 使用数据库的元素来更新猫鼬中的元素?
- react-native - React Native 慢速工作流程中的样式
- javascript - 查找 foo.prototype instanceof bar 所在的所有对象
- javascript - 当指定文本在页面上时,Jquery用户脚本单击单选按钮
- node.js - Mongoose:带有 null 的 ObjectID 数组
- c# - Expression.SwitchCase 匹配问题
- c# - 防止属性被序列化为 XML 的未记录方法
- c - c 中的文件 i/o 和缓冲区操作