char* a=new char;a="abc";会泄露内存么?
答案:3 悬赏:30
解决时间 2021-02-14 17:57
- 提问者网友:美人如花
- 2021-02-14 08:09
char* a=new char;a="abc";会泄露内存么?
最佳答案
- 二级知识专家网友:不服输的倔强
- 2021-02-14 09:31
char* a=new char;a="abc";
会的,你原来分配给a的空间后,再次修改它的值 ,使原来的分配的内存失控,无法回收了。
修改动态分配了内存的指针后,如果需要修改,记得先回收。
char* a=new char;delete a;a="abc";
会的,你原来分配给a的空间后,再次修改它的值 ,使原来的分配的内存失控,无法回收了。
修改动态分配了内存的指针后,如果需要修改,记得先回收。
char* a=new char;delete a;a="abc";
全部回答
- 1楼网友:寂寞的炫耀
- 2021-02-14 11:07
1,char*a;*a="abc" 是错误的, *a是字符,不是字符串。
2,另外两句完全一样。虽然编译能通过,但是你这句本身就是错误的:字符串定义应该是 const char *a = "abc"; 因为字符串储存在不可读内存中,所以c语言中字符串的的返回值是 const char*.
3, 如果要得到能读写的字符串请使用字符数组: char a[] = "abc"
- 2楼网友:桑稚给你看
- 2021-02-14 09:57
char *a=new char;a="abc";会泄露内存么?
不会,因为你定义的是一维数组,不过你上面的表达错误
char *a="new",char;a[]="abc";这样就不会报错了!
你这里char* a=new,你用char又用了指针,很明显,你这是要定义指向字符串数组指针,正确表达式为:char *a="new",char;a[]="abc";
如果第二个表达式我理解错误的话,你的意思就是说:将字符串"abc"给字符串变量a这个是没有错的,是正确的表达式,不会出现泄露内存!
一维数组的下标可以省,但是二维数组的列下标不能省,如char a[][10]是对的,char a[][]是错的,只有二维数组才会出现泄露内存的情况,因为它不能省列标
char *a=new char;a="abc";你上面并没有给固定的缓存区,而一维数组行标又可以省,所以你无论定义多少字符串,只要省行标,就不会出现泄露内存的情况!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯