c++中怎么delete一个用new申请内存的指针
c++中怎么delete一个用new申请内存的指针,char*p=newchar;*p="hello”;deletep;//或者delete[]p;这样会报错,为什么?因...
c++中怎么delete一个用new申请内存的指针,
char * p=new char;
*p="hello”;
delete p;//或者delete [] p;
这样会报错,为什么?
因为我要的空间不固定,所以不要申请固定的空间大小,这样子该怎么释放指针 展开
char * p=new char;
*p="hello”;
delete p;//或者delete [] p;
这样会报错,为什么?
因为我要的空间不固定,所以不要申请固定的空间大小,这样子该怎么释放指针 展开
3个回答
展开全部
*p="hello”; <- 你报错根本就是报在这一句而不是delete吧?……
p的类型是char*,*p的类型是char
但是hello的类型是 const char*
一个const char*怎么能赋值给char…………
申请空间只能固定大小不能不固定大小,不知道大小的话是无法申请空间的。不过这个大小可以是变量,以下代码需要头文件cstring
const char* pstr = "hello";
int pstrLen = std::strlen(pstr) + 1;
char* p = new char[pstrLen];
std::strcpy(p, pstr);
delete[] p;
如你所见,char*类型的字符串复制是不能用等号的。
p的类型是char*,*p的类型是char
但是hello的类型是 const char*
一个const char*怎么能赋值给char…………
申请空间只能固定大小不能不固定大小,不知道大小的话是无法申请空间的。不过这个大小可以是变量,以下代码需要头文件cstring
const char* pstr = "hello";
int pstrLen = std::strlen(pstr) + 1;
char* p = new char[pstrLen];
std::strcpy(p, pstr);
delete[] p;
如你所见,char*类型的字符串复制是不能用等号的。
展开全部
char * p=new char; // 你申请的是一个字节的p指针
*p="hello”; //p指向的内容为“hello”,但是越界了
delete p;//或者delete [] p;//用delete p 释放是正确的,delete [] p是用来释放数组的。
如果申请的空间不确定,则简单的办法是用容器,系统自己动态的申请、释放内存。
如果想自己管理内存,就没有简单的办法了,需要重新申请一块更大的内存,并且将*p的内容与新的内容放进新申请的内存中。delete []p; 就 哦了。。
*p="hello”; //p指向的内容为“hello”,但是越界了
delete p;//或者delete [] p;//用delete p 释放是正确的,delete [] p是用来释放数组的。
如果申请的空间不确定,则简单的办法是用容器,系统自己动态的申请、释放内存。
如果想自己管理内存,就没有简单的办法了,需要重新申请一块更大的内存,并且将*p的内容与新的内容放进新申请的内存中。delete []p; 就 哦了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char * p=new char[sizeof("hello")/sizeof(char)];
*p="hello”;
delete[] p;
*p="hello”;
delete[] p;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询