我在C(malloc)和C++(新)下面的代码。我很困惑为什么C版本不工作。 错误 - 内存分配惨败前块在malloc和新的堆初始化混乱
Exited: ExitFailure 127.
是否有这样做的任何问题。
C++版
#include <iostream>
using namespace std;
int main()
{
char *p=new char[20];
strcpy(p,"Hello");
p=(char*)"Hi";
cout<<p;
delete p;
}
C版
#include <stdio.h>
# include <malloc.h>
# include <string.h>
int main()
{
char *p=(char*)malloc(50);
strcpy(p,"Hello");
p=(char *)"Hi";
printf("%s",p);
free(p);
}
两者是不正确的。你必须施加“嗨”的事实应该是线索。 – 2014-08-30 16:47:56
这两个版本都不正确。 'p =(char *)“Hi”;'使'delete'或'free()'的行为未定义。 – 2014-08-30 16:48:34
还要注意,在delete中使用'new []'是未定义的行为,所以即使你修复了指针重新分配,它仍然是错误的代码。 – chris 2014-08-30 16:53:05