我试图在C中声明一个struct
some_struct
的指针数组
我可以这样做:
some_struct* arr[10];
而不是:
some_struct** arr=(some_struct**)malloc(10*sizeof(some_struct*));
有什么区别?
答案 0 :(得分:5)
在第一种情况下,数组的生命周期只是定义它的范围。 当它超出范围时,它将自动释放,因此您无需进行任何清理。
在第二种情况下,数组超出了声明指针的范围。因此,您需要稍后手动free()
以避免内存泄漏。
答案 1 :(得分:1)
第一个是在堆栈上分配的。
第二个是在堆上分配的。
free
手动解除分配之前(据说动态存储持续时间)free
(在这种情况下,在指向它的指针超出范围之前),你将有一个memory leak realloc
来要求C运行时尝试使其更大(或更小)到位(或者如果将其调整到适当位置,则将其移动到更大的内存区域是不可能的)答案 2 :(得分:0)
第一个将在堆栈中分配,第二个将在堆
中分配答案 3 :(得分:0)
some_struct* arr[10];
将在堆栈上分配内存,而some_struct** arr=(some_struct*)malloc(10*sizeof(some_struct*));
将在堆上分配它。