程序在内存取消分配后冻结

时间:2019-04-18 07:21:05

标签: c++ arrays string memory-management dynamic

在我的内存释放过程中,我的代码出现了一些问题。这是我遇到的错误:I make it to the part where my memory should be deallocated but instead of deallocation I get an infinite loop

.mat-drawer-side {
  border: none;
}

如您所见,我收到了“ make it out”通知,但我的程序被冻结,并且不允许我执行任何操作。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是可怕的UB。您分配char个长度为0的数组,然后将数据轻轻输入其中:保证缓冲区溢出!

尝试使用string而不是char[]。它不仅可以处理动态长度,而且还使您摆脱了手动内存管理的职责。

bool LinkedList::addArtist(){
    cout << "Enter artist name: ";
    string name;
    getline (cin, name);  // allows blanks in string and ignores \n

    ...      

    this->addAtBeginning(name, topStory, description);

    cout << "made it out" << endl;
    return true;
}

如果其余代码以相同方式使用char数组,则只需将所有内容重构为string。但是,如果您有很多代码已经可以很好地与char数组配合使用并且真的不想碰它,那么您可以将string x;作为const char*参数传递给x.c_str()