首页 > 解决方案 > 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

谁能向我解释为什么会发生这种情况以及如何安排。

标签: c++arraysobjectpointers

解决方案


虽然很难确定(因为我们没有要查看的其余函数),但您似乎可能遇到了悬空指针问题。

当你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

...您可能会发现问题已解决。完成后别忘了释放它!


推荐阅读