其中是由new(堆或堆栈)创建的结构字段
where is struct field that created by new (heap or stack)?
我读了关于堆栈和堆的内容但是我不知道这个
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这样在堆栈上工作的特殊分配函数)。我没有看到内存泄漏
当您使用new
或malloc()
时,内存通常从heap
分配。当你在一个函数中分配一个对象时,它会进入stack
.
所以,由于您使用new st()
,结构体中的x在堆上分配。没有,这里没有发现内存泄漏!
相关文章:
- 在堆栈上创建类实例
- 如何在C++中为堆栈动态创建结构?
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- 作为指针注入类后重新创建堆栈对象不好吗?
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 无法在具有常量变量大小的类中创建堆栈分配数组
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- 堆还是堆栈用于创建对象?
- 在堆或堆栈上分配的动态创建的字符串 - C
- 使用在堆栈上创建的对象调用虚拟函数
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 创建堆栈时出现问题!(街机游戏)
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 创建自己的owner_ptr类;在传递堆栈或静态分配的地址时如何避免UB?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 尝试使用堆栈创建队列.为什么我会遇到int转换错误的空白
- 如果对象是堆栈创建的(包括继承的类型),是否可以发出编译错误
- 为堆栈创建默认构造函数
- 其中是由new(堆或堆栈)创建的结构字段
- 构造函数,复制构造函数和堆栈创建:c++