其中是由new(堆或堆栈)创建的结构字段

where is struct field that created by new (heap or stack)?

本文关键字:堆栈 创建 字段 结构 new      更新时间:2023-10-16

我读了关于堆栈和堆的内容但是我不知道这个

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++标准没有讨论堆栈和堆,所以它取决于编译器在哪里分配东西。但实际上,它将存储在一个类似堆的结构中。

动态分配的变量(如stp)通常存储在堆中(除非您调用像alloca这样在堆栈上工作的特殊分配函数)。我没有看到内存泄漏

当您使用newmalloc()时,内存通常从heap分配。当你在一个函数中分配一个对象时,它会进入stack .

所以,由于您使用new st(),结构体中的x在堆上分配。没有,这里没有发现内存泄漏!