c++ - free:删除动态创建的数组时指针无效
问题描述
我目前正在练习指针算术,但在执行最后一行delete [] arr;
.
我意识到在我的 Android 手机上使用 C4Droid 程序(使用编译器“G++ + Bionic”)时,相同的代码运行没有任何问题,但在我使用 GCC 的平板电脑上,它只是不起作用。我发现的唯一方法是确保 arr 数组当前指向第一个地址。它没有的那一刻似乎失败了。我不知道它是否应该在我的手机上也失败,或者它是否是我在平板电脑上使用的 IDE 中的配置问题(尝试使用代码块和 codelite)。你能帮忙吗?
我也很清楚,我正在为数组的前两个点初始化值,而在技术上可以选择比这更小的数组大小。这只是测试。
#include <string>
#include <iostream>
int main()
{
int *arr{};
size_t size{};
std::cout << "Please enter the size of the array you want to create: "; std::cin >> size;
arr = new int[size];
*(arr + 0) = 5;
*(arr + 1) = 10;
std::cout << "++arr: " << ++arr << " (pointer incrementation, we move by an int and arr is now arr + 1)" << std::endl;
delete [] arr;
return 0;
}
解决方案
您没有删除分配的同一个指针 -++arr
移动了指针。调用delete[]
任何未分配的指针new type[]
都是未定义的行为——它可以工作,它可能会发生灾难性的失败,并且它可以在两者之间做任何事情——但你真的不应该依赖它。
推荐阅读
- javascript - 播放时有奇怪行为的音频
- server - 我需要将媒体流从服务器转发到服务器吗?SFU和MCU相互连接的架构
- java - 读取多个文件夹文件java
- android - app:mergeExtDexRelease FAILED 错误,React Native
- azure-devops - 无法从 Yaml Azure Devops 管道运行脚本
- java - Retrofit2 排队 onResponse 和 onFailure 未执行
- java - 在 java 中删除或不返回 BufferedOutputStream 文件
- image - 颤振文件选择器意外的空值
- php - 在 azure app php 7.4 linux 上启用 webp 时出现问题
- google-bigquery - 从 BigQuery 中删除重复记录