首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

new 和delete的一个有关问题

2012-02-25 
new 和delete的一个问题#includeiostreamusingnamespacestdintmain(){int*anewint[4]//动态创建一个i

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哦.

热点排行