我正在编写一个自定义编辑控件(C ++ / Win32),并且已经运行了基本功能。
malloc/free
组合来分配内存
堆,还是应该继续使用new/delete
对? 前几天我遇到了一个问题。我动态创建了一个
已分配的c-style字符串类成员(char* szClassName
)。然后我
在初始化列表中将其初始化为
szClassName("name of class")
。
当我在析构函数中使用'delete szClassName'时,它会导致 一些内存分配错误。你能告诉我这个问题吗 这里吗?
最后,你们能否给我一些你在自己的编程企业中发现有用的内存管理技巧?
谢谢,
Devjeet!
答案 0 :(得分:2)
我创建了一个动态分配的c-style字符串类成员(
char* szClassName
)。然后我在初始化列表中将其初始化为szClassName("name of class")
。
不,你没有。首先,您为char创建了一个指针。然后使用静态文字字符串常量“类的名称”(编译器将在目标文件的只读数据段中分配)的地址初始化指针。
因此,当你的析构函数调用delete szClassName
时,你试图在只读数据段中释放一块内存,而不是一个已经用new动态分配的内存块(因此错误)。