c++迭代后破坏对象的问题

标签 c++ class pointers for-loop memory-management

我写了这个小测试程序,问题是程序在 for 循环后终止并崩溃。谁能解释一下是什么原因?

我想要完成的事情

  1. 为 Animal 对象创建指针
  2. 为 26 个 Animal 对象分配内存
  3. 将每个 Animal 对象的名称设置为字母顺序 a-z
  4. 显示每个 Animal 对象的名称
  5. 通过调用析构函数删除所有分配的内存
  6. 退出主程序

来源

#include <iostream>
using namespace std;

class Animal {
private:
    string name;
public:
    Animal() {
        cout << "Animal created." << endl;
    }
    ~Animal() {
        cout << "Animal destructor" << endl;
    }

    void setName(string name) {
        this->name = name;
    }
    void speak() {
        cout << "My name is: " << name << endl;
    }
};

int main() {

    int numberAnimals = 26;

    Animal *pAnimal = new Animal[numberAnimals];

    char test = 97; // a


    cout << "========================================================" << endl;

    for (int i = 0; i <= numberAnimals; i++, test++) {

        string name(1, test);

        pAnimal[i].setName(name);
        pAnimal[i].speak();

    }

    cout << "========================================================" << endl;

    delete[] pAnimal;

    return 0;
}

最佳答案

改变

for (int i = 0; i <= numberAnimals; i++, test++)

for (int i = 0; i < numberAnimals; i++, test++)

您正在越界访问,这会导致未定义的行为。

关于c++迭代后破坏对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841543/

相关文章:

c++ - 有选择地省略 MSVC 中的帧指针

c++ - 带参数的构造函数初始化

c - -> 结构体中的运算符

ruby-on-rails - 添加内联类 if ...(在 1 行中)

objective-c - 在 Objective-C 中将类对象设置为另一个类的属性

c++ - ptree 迭代器成员未被自动完成识别?

c++ - 指针和带分配内存的指针有什么区别?

c++ - 禁用 QDialogs 默认关闭按钮(左上角 "cross button")?

c++ - 调用空字符串的 c_str

c++ - '{' 标记之前的预期类名