new 的有关问题

new 的问题啊
#include <iostream>
#include <cstring>
using namespace std;
int main (){  
char *p;
char a[20]="dsfdsfds";
p=new char[20];
strcpy(p,a);
cout<<endl<<p<<endl;
delete []p;
p=new char;
p='\0';
cout<<p;
    return 0;
}
假如有这个程序,如果会出现什么错误,(编译时没出错的)我的猜想是字符赋给一个指针变量,然后最后也没有delete p;还有点问题我想问的是 如果p=char [1];是delete p;还是delete []p;
cstring C new delete

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

编译没有错,运行出错,一般都是段错误啦!
修改了只读空间,字符串越界操作这些!
p = new char[1];
delete p ;
delete []p; //都可以的!
狗哥,那为什么字符'\n'可以赋值给指针变量

每个字符串结尾都有个一个字节位置来存放‘\0’
这些都是转义字符,都是占一个字节的阿!
肯定可以啦
但是类型不同的啊,‘\0’是字符啊,p是指针变量
实在是看不下去……

'\0’是char型的0,赋给指针相当于NULL
不要用这种写法
如果赋一个'\n’,不去用它程序也不会报错,如果要用肯定立马崩溃

还有,你要问的问题到底是什么?是用delete还是delete[]吗?这种情况是没关系但是养成new[]对应delete[],不管是什么类型或者长度是多少肯定不会有错
------解决方案--------------------
引用:
Quote: 引用:

首先,你这个例子证明不了都行。
其次,看看这个链接,这种问题都烂掉了。

Quote: 引用:

Quote: 引用:

误人子弟啊
竟然都可以

Quote: 引用:

编译没有错,运行出错,一般都是段错误啦!
修改了只读空间,字符串越界操作这些!
p = new char[1];
delete p ;
delete []p; //都可以的!



#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char *p = new char[1];
    printf(" ======new p   ok!\n");
    delete  p;