c++ - c++ 复制对象到指针数组
问题描述
我有一个Word
(对象)的指针数组,我必须将另一个类型的对象分配Word
给这个对象数组。
使用这两行代码,我将新对象w
放入我的对象数组 ( word
) 中。
Word w = Word(new_word, len);
this->word[index - 1] = w;
然后我打印我的对象数组,一切都正确
for (int k = 0; k < this->len; k++) {
cout << this->word[k].getChars() << endl;
} // End of function 1
在“函数结束”之后,我们返回调用另一个函数的主类。
此函数再次打印对象数组,但现在该函数不打印w
我在前一个函数中插入的对象。
第二个功能
for (int k = 0; k < this->len; k++) {
cout << this->word[k].getChars() << endl;
} // End of function 2
谁能向我解释为什么会发生这种情况以及如何安排。
解决方案
虽然很难确定(因为我们没有要查看的其余函数),但您似乎可能遇到了悬空指针问题。
当你Word w = Word(new_word, len);
在你的函数中声明时,你将它声明为一个局部变量,将它放在stack上。当您仍在函数中时,将其添加到数组中不会导致任何问题,但是一旦您从原来的位置返回,函数的内存(包括Word w
)就会被破坏。当您尝试通过从数组中打印它来再次访问该内存位置时,您正在寻找一个不再存在的变量,从而获得未定义的行为。
幸运的是,您使用的是 c++,并且堆内存管理得到了很好的支持!我会考虑实现word
为指针数组。如果你然后尝试这样的事情......
Word *w = new Word(new_word, len); //use "new" to create an object on the heap - persistent after you leave the function!
this->word[index - 1] = w; //make sure this->word is now an array of Word*; it seems to currently be an array of Word
...您可能会发现问题已解决。完成后别忘了释放它!
推荐阅读
- embedded - MCU SPI 在主模式下启用软件从管理,从是第三方 zigbee 设备,它希望其 nSSL 由外部驱动
- python - 如何为输出中的数据创建列?
- json - JSON.parse() 为局部变量和全局变量返回不同的值
- python - 图论 DFS 获取从开始到结束节点的路径
- asp.net-core - EFCore 添加默认阴影属性
- python - 有没有办法在另一台服务器上运行 python 脚本?
- arrays - Mongodb node.js 组织数组结果
- php - How to use a text file to log users in
- javascript - 使用基于实例的装饰器发布订阅者模式“this”始终未定义
- android - 如何重新绑定到正在运行的服务?