当前位置:编程学习 > C/C++ >>

C++ 关于delete 和new 函数的问题

定义了一个 char型指针,并对其赋初值,然后重新给其new 了一段规定了大小空间,然后又对其赋值,但这时候给它赋值的字符串大于new出来的空间,但编译运行却没问题,为什么?还有,当执行delete 操作时,程序运行到delete时,就卡住了,不会往下运行了,但编译时没显示错误,又是为什么?
追问:我现在发给你

吧,只是很简单的做一下测试而已,你把在你机子上上的结果说给我就行

 

char * c="sd";
 cout<<strlen(c);
 cout<<c<<endl;
// delete [] c;
 c=new char [11];
 for(int i=0;i<13;i++)
  c[i]='a'+i;
 //c="123456789101";
 cout<<strlen(c)<<endl;
 delete [] c;
 char * s="1111";
 s=new char [5];
 s=c;
 cout<<c<<s<<endl;
 delete [] c;

 return 0;
}

答案:
首先你的程序的确存在内存泄漏,因为第一次申请的内存没有被释放。其次用new申请的堆内存的返回值是一个四个字节的指针(因为C++中指针是四个字节),这个指针指向你所申请的内存的首地址,所以不存在空间不够的问题。再次,在执行delete的时候卡,可能是因为你的字符串没有结束符'\n'(因为我没有见到你的程序,所以不太确定)。
char仅针对字符类型数据,字符串是对象,占用的字节数比存入的字符数多1,因为结尾标记:'\o'占用一位。
前面是因为c++的安全保护不是那么的严格,后面的是因为你那个相当于是一个数组,所以应用delete[]释放空间

上一个:c语言和c+ 和c++语言的不同
下一个:这个程序用C++运行为什么不出结果呢?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,