【发布时间】:2012-11-29 13:30:31
【问题描述】:
当我在调试模式下运行使用以下代码创建的 .exe 时,它显示一些断言失败并且程序崩溃但是当我运行从以下代码的发布模式创建的相同 exe 时,它工作正常。
请帮助确定为什么我在调试模式下出现断言失败,但在发布模式下却没有。
#include<iostream>
using namespace std;
#include<string.h>
void main()
{
char *buf = new char[5]; //pre-allocated buffer
buf = "Hello";
delete [] buf;
getchar();
//cout<<buf;
//string *p = new (buf) string("hi"); //placement new
//string *q = new string("hi"); //ordinary heap allocation
}
【问题讨论】:
-
注意,在这种情况下,你可以说
char buf[] = "Hello";,你会得到一个你甚至不必解除分配的副本。 -
在 C++ 中你很少需要 C 字符串,你应该使用
<string>代替。在您实际需要 C 标头的少数情况下,您应该改用 C++ 标头(例如:)。
标签: c++