我有以下代码:
string * p = new string[8];
cout<<sizeof(p)<<endl;
free(p);
Run Code Online (Sandbox Code Playgroud)
这似乎对我好,但失败了:
8
a.out(85837) malloc: *** error for object 0x7fb5b3403ae8: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
对整数数组的另一个测试工作.c ++字符串有什么特别之处吗?
aar*_*man 12
首先,当你使用时,new你需要使用delete,而不是free().事实上,你真的不应该使用free()或malloc()在C++中.为什么你永远不应该混合new和/ free或malloc()删除的一个很好的解释是,new并且delete调用构造函数和析构函数,free()并且malloc()与它无关,它们只是分配和释放内存,特别是对于内置类,这很糟糕因为你没有知道在std::string析构函数或构造函数中应该发生什么,有可能使它与你自己的内置类一起工作(但不要这样做).
您可以使用以下代码替换代码:
string * p = new string[8];
cout<<sizeof(p)<<endl;
delete [] p;
Run Code Online (Sandbox Code Playgroud)
最后,我建议你使用像std::vector或的内置数据类型std::array.它们比标准的旧C数组更加C++ - ish.
小智 11
邑.new []配对delete [].free()导致未定义的行为.