delete void *指针的问题

void data; data = new char[100]; delete[] data; 这段代码有什么问题吗
是的,这段代码有一个问题。问题在于 delete[] data; 这一行。在这一行中,您试图使用数组形式的 delete 运算符来释放 data 指向的内存。然而,由于 data 被声明为 void
类型,因此这样做是不正确的。

在 C++ 中,当您使用 new[] 运算符动态分配一个数组时,您必须使用数组形式的 delete[] 运算符来释放该数组所占用的内存。然而,为了正确地使用 delete[] 运算符,您必须提供一个指向数组元素类型的指针。

在您的代码中,data 被声明为 void* 类型。这意味着它可以指向任何类型的对象。然而,当您试图使用 delete[] data; 来释放内存时,编译器无法确定 data 指向的数组的元素类型。因此,这样做是不正确的,并且可能会导致未定义行为。

为了解决这个问题,您可以将 data 的类型更改为 char*,如下所示:

char *data;
data = new char[100];
delete[] data;

在这段修改后的代码中,data 被声明为 char* 类型。这意味着它指向一个 char 类型的数组。因此,当您使用 delete[] data; 来释放内存时,编译器能够确定 data 指向的数组的元素类型,并正确地释放内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值