相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

取消引用已删除的指针总是会导致访问冲突?

我这里有一个非常简单的C++代码:

char *s = new char[100];
strcpy(s, "HELLO");
delete [] s;
int n = strlen(s);
Run Code Online (Sandbox Code Playgroud)

如果我通过按F5(开始调试)从Visual C++ 2008运行此代码,这总是导致崩溃(访问冲突.)但是,在IDE外部启动此可执行文件,或使用IDE的Ctrl + F5(启动而不调试)不会'导致任何崩溃.有什么区别?

我还想知道是否可以稳定地重现因访问已删除区域而导致的访问冲突崩溃?现实生活中这种崩溃难得一见吗?

c++ memory crash pointers visual-c++

10
推荐指数
3
解决办法
2924
查看次数

为什么这个C++代码没有从堆中删除对象?

我正在学习C++,我已经编写了一些代码来获得手动创建和删除对象的一些经验.我不认为我完全理解删除的语义,因为print语句仍然打印3,我相信它不应该.

#include <iostream>

class Test {
public:
    int x;
    int y;
};

using namespace std;

int main() {
    Test t1;
    t1.x = 1;
    t1.y = 2;
    cout << t1.x << endl;
    cout << t1.y <<endl;

    Test *t2 = new Test();
    t2->x = 3; t2->y = 4;
    cout << t2->x << endl;
    cout << t2->y <<endl;
    delete t2;

    cout << t2->x << endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

joel-MacBook-Air:src joel$ ./test 
1
2
3
4
3
Run Code Online (Sandbox Code Playgroud)

请问你能解释为什么它在最后打印3?我的知识是它不应该打印3删除对象.

c++

0
推荐指数
1
解决办法
82
查看次数