typdef struct _structname
{
int x;
string y;
} structure_name;
structure_name variable;
现在我访问variable.x
和y
。使用后如何解除释放或释放variable
使用的内存?
实际上,当我正在执行 variable.y =“sample string”时,内存将被分配。因此,=运算符会分配导致问题的内存。我现在该如何解决?
答案 0 :(得分:7)
您已在堆栈上分配了结构。当它超出范围时,它将使用的内存将被释放。如果你想控制何时释放内存,你应该调查动态内存分配。
答案 1 :(得分:5)
只有在动态分配内存时才需要释放内存。
动态分配使用new
或malloc
完成,解除分配分别使用delete
或free
完成。
如果您的计划在任何地方都没有使用new
或malloc
,那么您也不需要使用delete
或malloc
。请注意,delete
的{{1}}数量与new
的数量相同。同样适用于malloc
和free
。
即,在一个程序中:
new
语句的数量等于已执行的 delete
语句的数量!malloc
语句的数量等于已执行的 free
语句的数量!如果执行 delete
或free
的次数较少,那么您的程序就是泄漏内存。如果执行 new
或malloc
的次数较少,那么您的程序很可能会崩溃!
答案 2 :(得分:4)
在C ++中,您不需要“typedef”您的结构。
使用:
struct structure_name
{
int x;
int y;
};
如果你这样创建myVar:
structure_name myVar;
您不需要取消分配它,当它超出范围时,它将自动销毁并释放。
如果您使用过指针(使用“new”关键字创建),则需要使用“delete”关键字明确释放它们。
在C ++中,您将仅在特定情况下使用指针。
答案 3 :(得分:1)
可以通过引入一对大括号{
}
来控制变量的生命周期。
{
structure_name variable; // memory for struct allocated on stack
variable.y = "sample string"; // y allocates storage on heap
// ...
} // variable goes out of scope here, freeing memory on stack and heap
答案 4 :(得分:0)
不需要释放,因为你已经将它们声明为值而不是指针而不是动态分配内存。
只有在动态分配内存时才需要释放内存。