c ++将对象复制到指针数组

时间:2019-08-12 16:51:29

标签: c++ arrays object pointers

我有一个ngOnDestroy(){ if (this.firestoreSubscription) this.firestoreSubscription.unsubscribe(); } (对象)的指针数组,我必须向该对象数组分配另一个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

任何人都可以向我解释为什么会发生这种情况以及如何安排它。

1 个答案:

答案 0 :(得分:1)

尽管很难确定(因为我们没有剩下的功能要看),但是看来您可能遇到了dangling pointer问题。

在函数中声明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

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

相关问题