Mik*_*e.G 0 c++ dynamic-memory-allocation delete-operator visual-studio-2013
这是我记忆的方式.
Expression = new char[MemBlock.length()];
VarArray = new char[Variables.length()];
for (unsigned int i = 0; i < MemBlock.length(); i++)
{
Expression[i] = MemBlock.at(i);
}
Expression[MemBlock.length() + 1] = NULL;
for (unsigned int i = 0; i < Variables.length(); i++)
{
VarArray[i] = Variables.at(i);
}
VarArray[Variables.length() + 1] = NULL;
Run Code Online (Sandbox Code Playgroud)
当我尝试删除它时,我收到错误...
Logic::~Logic(){
delete[] VarArray; -> happens on this line.
VarArray = NULL;
delete[] Expression;
Expression = NULL;
}
Run Code Online (Sandbox Code Playgroud)
在整个代码中,我不会对新阵列进行任何更改,但它告诉我我讨厌一些问题,我不能指出问题所在,任何帮助都会很棒.
VarArray[Variables.length() + 1] = NULL;
访问您不拥有的内存,因为这样分配了这个数组:
VarArray = new char[Variables.length()];
此数组中的最后一个元素具有索引Variables.length() - 1.
在调试器中运行它应该是有益的.我相信,一些静态分析工具(例如lint)会强调这种误用.
您还可以考虑使用boost :: scoped_array或类似方法来删除手动删除的需要.早期学习C++的一个好教训就是采用RAII而不是手动内存管理,只要你能做到.
| 归档时间: |
|
| 查看次数: |
2971 次 |
| 最近记录: |