首页 > 试题广场 >

使用char* p = new char[100]申请一段内

[单选题]

使用char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题( )?

  • 不会有内存泄露,但不建议用
  • 会有内存泄露
  • 编译就会报错,必须使用delete [] p
  • 编译没问题,运行会直接崩溃

基本类型的对象没有析构函数,因此回收基本类型的数组空间用delete和delete[]都可以,但为了规范,不建议用delete。

发表于 2019-06-04 18:52:03 回复(4)
基本类型的对象没有析构函数,因此回收基本类型的数组空间用delete和delete[]都可以,但为了规范,不建议用delete。但自定义的对象由析构函数发起回收,所以每一个对象都要调用一次delete,所以才有有new[]对应delete[]。
直接声明的对象,比如shape a,即在栈上面的对象,所在作用域结束后,会自动执行析构函数,而new出来的在堆上的对象,不调用delete,即使它所在的作用域已经结束,也不会调用析构函数

delete详解:首先调用析构函数,完成类成员的释放,比如类成员有vector也指向了堆上的内存,就需要在析构函数中同样使用delete释放这块内存,或者说它自身处于一个容器当中,就需要在这个容器中erase它

然后再free掉整个对象的内存;

delete b过后,b仍然指向改内存,即地址不变,但指针可能为悬垂指针,访问它可能带来意想不到的结果,也可能正确访问,不确定,所以建议delete后,把指针设置成NULL,后面也可根据指针是否为NULL判断是否可用


编辑于 2020-03-12 17:03:47 回复(0)
基本类型的指针释放由内存直接执行,所以delete和delete[]都能表达回收内存的意思。但自定义的对象由析构函数发起回收,所以每一个对象都要调用一次delete,所以才有有new[]对应delete[]。
发表于 2020-03-12 15:23:53 回复(0)
***的,都说要配套使用,结果来了个搅屎棍的答案

发表于 2020-09-25 21:28:04 回复(0)
基本类型的对象没有析构函数,因此回收基本类型的数组空间用delete和delete[]都可以,但为了规范,不建议用delete。但自定义的对象由析构函数发起回收,所以每一个对象都要调用一次delete,所以才有有new[]对应delete[]。
发表于 2023-10-24 22:16:53 回复(0)
这题有问题
delete p 只释放了一个字节的内存
发表于 2022-12-09 22:26:58 回复(0)
又是C++
发表于 2019-09-24 10:37:11 回复(0)