Visual c++ 如何释放CString的动态数组?
在我的类中有一个动态数组Visual c++ 如何释放CString的动态数组?,visual-c++,memory-management,mfc,Visual C++,Memory Management,Mfc,在我的类中有一个动态数组CString,我在类的构造函数中使用了new操作符来创建它,所以我在析构函数中写了一行来释放内存。它不会导致任何错误,但会导致运行时出现断点! 错误是: Windows已在Genetic Algorithm.exe中触发断点 这可能是由于堆损坏,这表明Genetic Algorithm.exe或其加载的任何DLL中存在错误 这也可能是由于用户在Genetic Algorithm.exe具有焦点时按下F12 输出窗口可能有更多诊断信息 代码是: //in construc
CString
,我在类的构造函数中使用了new
操作符来创建它,所以我在析构函数中写了一行来释放内存。它不会导致任何错误,但会导致运行时出现断点!
错误是:
Windows已在Genetic Algorithm.exe中触发断点
这可能是由于堆损坏,这表明Genetic Algorithm.exe或其加载的任何DLL中存在错误
这也可能是由于用户在Genetic Algorithm.exe具有焦点时按下F12
输出窗口可能有更多诊断信息
代码是:
//in constructor
StringFormat = new CString[Info.VariablesCount + 1];
for (int i=0;i<=Info.VariablesCount;i++)
StringFormat[i] = "%2.3f";`
// in destructor
free(StringFormat);
//在构造函数中
StringFormat=new CString[Info.VariablesCount+1];
对于(int i=0;i),您使用<代码>新建[]/COD>分配cStult/Cuth>数组。您必须使用<代码> Dele[][/Case]来释放它——基本C++内存规则。< /P>
<> >析构函数使用:<代码> Dele[ ] StringFormat;< /Calp>> P>使用<代码> NeX[]/Calp>分配cStult/Cuth>数组。您必须使用<代码> Dele[][/C]>释放它-Basic C++内存规则。< /P>
在析构函数中使用:delete[]StringFormat;
除了使用delete[]StringFormat
删除字符串外,还需要遵循三个规则
- 提供一个复制构造函数
- 提供赋值重载功能
检查。除了使用delete[]StringFormat
删除字符串外,还需要遵循三个规则
- 提供一个复制构造函数
- 提供赋值重载功能
检查。您已使用new
运算符分配内存,并尝试使用free
释放内存。除某些语义不同外,两者都有不同的堆。您使用new
分配内存,使用delete
释放内存。同样,您使用malloc
分配内存,并释放内存使用免费也一样。不能混合使用
另外,如其他人所述,如果您使用数组模式new
(而不是scalernew
),则必须使用数组模式delete
,而不是scalardelete
(即delete[]
,而不是delete
)删除它
非常建议您使用vector
、list
、CArray
、CStringArray
或其他容器来拥有字符串数组,而不是自己管理它。您使用了new
操作符来分配内存,并尝试使用free
释放内存拥有不同的堆,除了它们不同的一些语义。您可以使用new
进行分配,使用delete
释放内存。同样,您可以使用malloc
进行分配,使用free
释放相同的堆。您不能混合使用它们
另外,如其他人所述,如果您使用数组模式new
(而不是scalernew
),则必须使用数组模式delete
,而不是scalardelete
(即delete[]
,而不是delete
)删除它
非常建议您使用vector
、list
、CArray
、CStringArray
或其他容器来拥有字符串数组,而不是自己管理它。为什么不使用一些“动态数组类”像STD::向量,甚至,既然你想要一个字符串的数组,CStringArray?我不知道MFC中有这样的东西!我会看看它们。YouStd::vector是标准C++的东西,既然MFC是C++,那么你就有它。CStringArray和其他容器是MFC的一部分。但是我建议使用标准的。它们很好用。h MFC类如CString和更优。为什么不使用一些“动态数组类”像STD::向量,甚至,既然你想要一个字符串的数组,CStringArray?我不知道MFC中有这样的东西!我会看看它们。YouStd::vector是标准C++的东西,既然MFC是C++,那么你就有它。CStringArray和其他容器是MFC的一部分。但是我建议使用标准的。它们很好用。h MFC类如CString和更好。感谢Ajay编辑我的问题。也感谢你的回答,但正如我从每个人那里问到的,为什么这适用于其他类型的变量!?我用新运算符创建了一个二维double数组,我用free发布了它,没有任何问题!这个断点就发生在CString a时rray!为什么?如果您在调试器(调试生成)下运行这种代码,您肯定会得到一个断言!请使用最新版本的Visual Studio.Saman,使用简单的内置类型,如“int”,它通常不会引起问题,因为构造函数和析构函数不必被调用。感谢Ajay编辑我的问题。感谢你的回答,但正如我从每个人那里问到的,为什么这适用于其他类型的变量!?我用新运算符创建了一个二维double数组,我免费发布了它,没有任何pro错误!此断点刚刚发生在CString数组中!为什么?如果在调试器(调试生成)下运行此类代码,您肯定会得到断言!请使用最新版本的Visual Studio.Saman,使用简单的内置类型,如“int”,它通常不会引起问题,因为构造函数和析构函数不必被调用。