我对视觉工作室有疑问(我认为是这样)。当我尝试在 Visual Studio 中编译它时,我收到错误(断点)。
int main()
{
int p = 4;
int d = 7;
int* x = &d;
cout << *x << endl;
delete x;
}
Run Code Online (Sandbox Code Playgroud)
我遇到这样的错误。
难道我做错了什么???在代码块中它可以工作。当我重新启动 Visual Studio 时,我收到此错误:
https://i.stack.imgur.com/JWrRy.png
delete pointer;不会删除指针本身,而是删除指针所指向的数据。在这种情况下,这恰好是进入函数作用域时在堆栈上分配的内存main(),并在退出作用域时自动释放main()。您的程序尝试使用 释放此内存delete,这是未定义的行为,因为您正在调用delete未使用 分配的内存new。
对于您的情况,您应该简单地删除delete. 堆栈上的所有内存都会在main():结束时自动释放p,d并且x(保存地址的变量,而不是它指向的地址)都在堆栈上分配。