new 和delete的一个问题
#include <iostream>
using namespace std;
int main()
{
int* a = new int[4];//动态创建一个int数组
int* b;//一个指向int*型的指针
b = &a[2];//b指向a数组中第三个元素
delete b;//剔除第三个元素
return 0;
}
使用VC6.0编译,这里为了简单起见先不考虑内存泄漏问题。
问题是在delete b时弹出一个错误框,内容如下:
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!
Program: ...ents and Settings\test\Debug\Cpp1.exe
File: dbgheap.c
Line: 1044
Expression: _CrtIsValidHeapPointer(pUserData)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
---------------------------
终止(A) 重试(R) 忽略(I)
---------------------------
而在用DevC++编译后运行没这个问题。
我想a中第三个元素是动态创建的,应该可以delete啊,但为什么用VC编译的EXE运行到那句时会弹出错误对话框呢?哪位大虾能指点指点?
[解决办法]
#include <iostream>
using namespace std;
int main()
{
int* a = new int[4];//动态创建一个int数组
int* b;//一个指向int*型的指针
b = &a[2];//b指向a数组中第三个元素
delete b;//剔除第三个元素
for(int i=0; i <4; i++) {
a[i]=i;
cout < < "a[ " < <i < < "] " < < " = " < <a[i] < <endl;
}
system( "PAUSE ");
return EXIT_SUCCESS;
}
-----------------------------
dev cpp试了一下.发现竟然a[2]还是可以用的.奇怪喽.呵呵.
说不清了.总之,还是不推荐你这样delete哦.