为什么指针未复制时会出现错误
Why do I get an error when the pointer is not copied?
以下代码引发一个错误。错误在delete[]pIntArray处,错误为_ASSERTE(_BLOCK_TYPE_is_VALID(pHead->nBlockUse((;:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int* pIntArray = new int[50];
cout << "adding numbers to array ..." << endl;
for (int i = 0; i < 50; i++)
{
pIntArray[i] = i + 10;
}
cout << "values in array: " << endl;
for (int i = 0; i < 50; ++i)
{
cout << "integer[" << i << "] = " << *(pIntArray++) << endl;
}
cout << "deleting dynamic memory ..." << endl;
delete[] pIntArray;
cout << "memory deleted." << endl;
return 0;
}
但事实并非如此。唯一的区别是我正在复制指针并递增副本:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int* pIntArray = new int[50];
cout << "adding numbers to array ..." << endl;
int* pCopy = pIntArray;
for (int i = 0; i < 50; i++)
{
pIntArray[i] = i + 10;
}
cout << "values in array: " << endl;
for (int i = 0; i < 50; ++i)
{
cout << "integer[" << i << "] = " << *(pCopy++) << endl;
}
cout << "deleting dynamic memory ..." << endl;
delete[] pIntArray;
cout << "memory deleted." << endl;
return 0;
}
有人能解释一下原因吗?提前谢谢。
因为您正在更改指针的值,指针指向的内存地址:
示例1:
[0][0][0][0][0][0][0][0][0][0][0][0]
^
|
pIntArray is here
示例2:
[0][0][0][0][0][0][0][0][0][0][0][0]
^ ^
| |
pIntArray is here pCopy is here
您需要delete[]
精确的指针(这是因为大多数C/C++运行时存储分配在ptr - 1 word
的内存大小(
for (int i = 0; i < 50; ++i)
{
cout << "integer[" << i << "] = " << *(pIntArray++) << endl;
}
cout << "deleting dynamic memory ..." << endl;
delete[] pIntArray;
使用++
修改pIntArray
的值,然后将修改后的值传递给delete[]
。您需要将new[]
返回的值精确地传递给delete[]
。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 运行几次后合并段错误C++(指针算术)
- LinkedList实现C 错误指针间接
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- Xcode 错误:指针和双精度之间的比较
- 未分配正在释放的本机node.js插件错误指针
- 错误指针:解析令牌时无法计算表达式
- C++-va_list错误指针
- 为什么我收到错误" (指针的名称)不是模板)?
- mmap 错误:分段错误/指针无效错误
- C++ Winsock2 错误指针断点触发
- C++ 代码中的错误指针错误
- 数组错误指针上的增量运算符
- MAKEINTRESOURCE 返回资源 ID 的错误指针
- 分段错误C++指针
- 段错误指针
- C++ 错误 :: 指针数组的EXC_BAD_ACCESS
- 通过模糊 mat 从 std::vector: <int>cv::Exception 中获取错误指针
- 正在解决编译器错误:指针可能未初始化