从偏移量中删除数组
Delete array from an offset
假设我分配了一个整数数组
int test[] = new int[100];
我把指针指向中间的某个地方
int *temp = &test[50];
然后我临时调用删除[]
delete[] temp
在这种情况下,编译器如何知道要删除的元素的大小?
它不会(或者会,我不知道)。您正在调用未定义的行为。您只能在分配有 new[]
的指针上调用delete[]
。
例如,我在 MSVS 中遇到崩溃。
你必须传递由new[]
返回的相同内存位置,传递任何其他内容都是未定义的行为。
你不能那样做。编译器必须跟踪它分配的内存大小。标准没有说明它必须如何做到这一点。某些编译器将分配的内存大小存储在返回的地址之前。在这种情况下,您正在做的事情可能会导致未定义的行为。
答案是否定的。因为删除运算符需要定位内存块的位置及其大小,这主要在分配数组的第一个成员之前。您应该查看"内部 C++ 对象模型"
相关文章:
- 将数组的地址分配给变量并删除
- 你能帮我解决删除数组 c++ 中重复值的挑战吗?
- 如何在C++中删除静态数组?
- 删除指针数组 (C++) 中的元素
- 删除动态数组时未定义标识符
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++数组删除的例外
- C++:指向对象的指针数组 - 删除元素时程序崩溃>
- 你如何打印出使用数组删除某些字符的回文
- 类数组 - 删除操作
- 何时从数组删除类指针
- 从自定义数据类型向量数组C 删除
- 动态数组删除
- 动态数组C++(删除)
- 动态数组删除旧指针并将其设置为新数组C++
- C++ 字符数组删除重复字符
- 使用数组删除记录
- 数组删除导致EXC_BAD_ACCESS错误
- 为什么常规删除运算符在需要数组删除运算符时起作用
- 智能指针数组删除器