c++ - new(堆或堆栈)创建的结构字段在哪里?

标签 c++ heap-memory stack-memory

我读过栈和堆 但我不知道这个

x 在哪里(在堆中还是在栈中)? 我的代码是否存在内存泄漏?

struct st
{
    int x;
    int* y;
};

st* stp;

void func()
{
    st* s=new st();

    s->x=2;
    s->y=new int(5);

    stp=s;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{

    func();

    cout << stp->x << "  " << *stp->y <<endl;

    delete stp->y;
    delete stp;
}

输出 2 5

最佳答案

stp 是动态分配的,因此在堆上。* 因此,它的所有成员(包括 x)都在堆。

据我所知,您没有内存泄漏。


* 从技术上讲,C++ 标准不讨论堆栈与堆,因此由编译器决定分配内容。但实际上,它会存储在类似堆的结构中。

关于c++ - new(堆或堆栈)创建的结构字段在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325380/

相关文章:

python - 如何记住 PyQt 应用程序的最后一个几何图形?

java - 如何从java堆转储中查找缓存对象

c++ - 不同方式的动态数组声明

c++ - 在没有 `new` 关键字的情况下实例化一个类会导致在堆栈或堆上创建其内部变量吗?

c++ - 为什么有时栈地址低于堆地址?

启用功能时代码行为不当(可能的大小限制)

C++ 枚举问题和 g++ 中可能的循环依赖

c++ - 如何有效地从 std::deque 创建 D3D 缓冲区

c++ - 使用 SendMessage 将文本输入属于另一个进程的编辑控件

java - 如何通过 JMX 检测 OutOfMemoryError