如何在c++中删除一个char*

How to delete a char* in C++

本文关键字:一个 char c++ 删除      更新时间:2023-10-16

每次我执行这个…出现错误:

char * var= new char[256];
var= "hola mundo";
delete var;
我得到的错误是:

malloc: ***错误的对象0x10007fd20:指针释放未分配
***将malloc_error_break中的断点设置为

我不想使用std::string或std::vector…因为我在几个函数中使用char*作为参数,我希望能够销毁它

var= "hola mundo";赋值给编译器保留的内存中的字符串时。调用delete是未定义的行为。此外,有一个泄漏的原始var,因为它从来没有deleted。您应该使用strcpy将字符串复制到var,或者使用std::string,这样您就不必担心释放它。示例:std::string var = "hola mundo";

当你给var赋值时,从new得到的指针值会丢失,var的原始内容也会丢失。然后你试图删除其他东西。

首先,从字符串文字到char*变量的赋值不会将字符串数据复制到您分配的内存中。相反,它只是重新分配指针,使var不再指向您分配的内存。这意味着您分配的内存丢失了,并且从未正确释放过,这意味着您正在使用delete和一个您从未分配过的指针,这是无效的。

其次,你用new char[]分配数组,所以你需要使用delete []而不仅仅是delete

第三,字符串字面值自动包含空结束符,因此您不需要添加额外的结束符:

var = "hola mundo";

最后,如果你可以使用c++ 11或c++ 14,你不应该直接使用newdelete。在早期版本的c++中,在许多情况下仍然可以避免newdelete。在这种情况下,因为已经有了std::string类型,所以无论使用哪个版本的c++,都应该简单地使用它。这三行代码应该替换为:

std::string var = "hola mundo";