【发布时间】:2014-08-03 03:43:26
【问题描述】:
每次我执行这个...我都会收到一个错误:
char * var= new char[256];
var= "hola mundo\0";
delete var;
我得到的错误是:
malloc: *** 对象 0x10007fd20 错误:未分配指针被释放
*** 在 malloc_error_break 中设置断点
我不想使用 std::string 或 std::vector... 因为我在几个函数中使用 char* 作为参数,我希望能够销毁它。
【问题讨论】:
-
两个错误——
strcpy(var, "hola mundo");代替了assign,delete[] var;代替了delete -
你真的应该使用std::string。一个原因:你不能分配这样的字符串。对于 c 风格的字符串,你需要使用
strcpy或strncpy或strcat或strncat'。 -
“我不想使用 std::string 因为我在几个函数中使用 char* 作为参数” - 然后呢?你没听说过
std::string::c_str()方法吗? -
嗯,
std::string::c_str()返回值是const char*,不允许修改(即使使用 const-cast,它也会破坏字符串内部结构,如长度和容量),所以它是并不总是一个替代品。 -
@keltar 然后
&str[0]。这是可以修改的。
标签: c++ arrays pointers char delete-operator