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
(而不是scaler
new
),则必须使用数组模式
delete
,而不是scalar
delete
(即
delete[]
,而不是
delete
)删除它


非常建议您使用
vector
list
CArray
CStringArray
或其他容器来拥有字符串数组,而不是自己管理它。

您使用了
new
操作符来分配内存,并尝试使用
free
释放内存拥有不同的堆,除了它们不同的一些语义。您可以使用
new
进行分配,使用
delete
释放内存。同样,您可以使用
malloc
进行分配,使用
free
释放相同的堆。您不能混合使用它们

另外,如其他人所述,如果您使用数组模式
new
(而不是scaler
new
),则必须使用数组模式
delete
,而不是scalar
delete
(即
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”,它通常不会引起问题,因为构造函数和析构函数不必被调用。