首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

new 的有关问题

2013-09-05 
new 的问题啊#include iostream#include cstringusing namespace stdint main (){char *pchar a[20]

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;  


    printf(" ======delete p ok!\n");

    char *q = new char[1];
    printf(" ======new q    ok!\n");
    delete [] q;
    printf(" ======delete q ok!\n");

    return 0;
}
//结果
 ======new p   ok!
 ======delete p ok!
 ======new q    ok!
 ======delete q ok!


可以说说你的看法,我也只是新手,测试没问题的


看了下, 对于单个字节我感觉应该是可以的!

那上面的是结构体数组肯定旧不一样了!
这里是 char *p = new char [1];
即使delete p 也不会有上面说的内存泄漏问题的, 我感觉!

童鞋,编程不是靠感觉的。退一步说,如果你非得靠感觉编程,请别鼓励别人也这么干,毁人啊。
the standard says one new is to be paired with one delete, and one new[] with one delete[],anything else is undefined. period.

热点排行