关于c++ delete的一个有关问题

关于c++ delete的一个问题
不多说,上代码:
#include<iostream>
using namespace std;

int main(){
int b = 2;
int *a = &b;
delete a;
cout<<"delete success!"<<endl;
return 0;
}

编译运行后,cout不执行,换一代机器运行,cout正常输出。调试c++库代码发现,进入delete a后,
程序死在了
/* verify block type */
            _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

F11跟踪进入上面这句,发现最后死在了下面代码的第四句:
PFNMessageBox dpfnMessageBox=(PFNMessageBox) DecodePointer(pfnMessageBox);
            if(dpfnMessageBox)
            {
                return (dpfnMessageBox)(hWndParent, lpText, lpCaption, uType);
            }

有人知道是出了什么问题么
------解决方案--------------------
为什么要在这样严重错误的代码上浪费时间???
------解决方案--------------------
delete a本来就是不合理的,你在考验编译器有多健壮吗?
------解决方案--------------------
你没有new,干嘛去delete?
------解决方案--------------------
并不是有指针就要delete的,用new开辟了新空间,才需要delete
------解决方案--------------------
非要以你的逻辑,你可以这么做
#include<iostream>
using namespace std;
#include <string>
int main(){
    char b = 2;
    char *a=new char(2);
    strcpy(a, &b);
    delete a;
    cout<<"delete success!"<<endl;
    return 0;
}

关于c++ delete的一个有关问题