【问题标题】:c++ copy object to pointer array [closed]c ++将对象复制到指针数组[关闭]
【发布时间】:2019-12-19 06:30:04
【问题描述】:

我有一个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++ arrays object pointers


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

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

【讨论】:

  • 学究式注意:您不太可能看到不使用它们的实现,但 C++ 不需要堆栈和堆。如果有人能弄清楚如何用仙尘和 Care Bear 绒毛实现自动和动态内存,那就是有效的 C++。
  • @user4581301 多亏了那个引起好奇心的评论,我才知道Automatic and Dynamic 内存是什么。阅读带有-Wpedantic 的帖子的开发人员比大多数人意识到的更有帮助!
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 2021-06-19
  • 2015-10-26
  • 2020-07-07
  • 2019-09-26
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多