c++:删除不同的静态和动态指针类型
C++ : deleting different static and dynamic pointer type
我有一段愚蠢的代码,我需要一些解释。
int main() {
int *ptr_i = new int[100];
char *ptr_c = (char *)ptr_i;
delete [] ptr_c;
return 0;
}
首先,我预计这段代码会崩溃,但它没有,我相信这是因为在这种情况下,分配器会跟踪要取消分配的字节数。我在这段代码上也运行了valgrind,它显示没有内存泄漏。我需要澄清以下事项:
如果处理POD数据类型,char类型的c'tor与int类型的c'tor有什么不同?
除了编码约定,这段代码还会导致哪些问题?
int
没有构造函数,char
也没有。然而,由于操作符delete
(更准确地说是delete []
)的使用与操作符new
(new []
)的使用不匹配,因此行为是未定义的。
未定义的行为并不意味着会发生崩溃。这并不意味着会发生内存泄漏。
这仅仅意味着c++标准对发生的事情没有任何限制。
可能发生也可能不发生崩溃。内存泄漏可能发生,也可能不会发生。编译器可能会也可能不会重新格式化您的硬盘。您的程序可能会或可能不会打印值42
共27
次。你能想到的任何其他事件都可能发生,也可能不发生。
所以这样的代码可能导致的问题可能是....任何东西……甚至什么都没有。最大的问题是你不一定知道。
相关文章:
- 如果非动态变量被指针引用,何时超出范围?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 指针的 C++ 动态数组 - 何时需要使用它?
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 指针类型类成员的动态强制转换的恒定性是什么?
- 删除包含包含动态对象的 STL 容器的智能指针
- 带有模板问题的指针的动态数组
- 存储指向动态数组元素的指针
- 动态指针引用数组由三元运算符返回值,但有异常
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 使用动态指针数组进行动态对象分配 - 使用什么删除?
- 删除静态/动态指针后无法重新分配内存
- 动态指针赋值c++
- 是否将动态指针设置为null
- 动态指针和对象
- C++将动态指针传递给 2D 数组
- 如何使用动态指针和智能指针更改变量的值
- c++ 2维静态数组兼容2维动态指针
- c++:删除不同的静态和动态指针类型
- wchar_t **WinList 动态指针数组到字符数组