读书人

关于结构体的内存分配与释放的有关问题

发布时间: 2012-08-09 15:59:21 作者: rapoo

关于结构体的内存分配与释放的问题
现有一个结构体:

C/C++ code
typedef struct _ScPoint{    int x;    int y;}ScPoint;


函数:

C/C++ code
inline ScPoint scPoint(int x, int y){    ScPoint p;    p.x = x;    p.y = y;    return p;}



=====================================================

那,我每次需要使用一个点的时候,

ScPoint p = scPoint(3, 5);

这样可以么?不需要malloc么?释放呢?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
还有,


我需要一个数组

ScPoint vector[10];

那么vector怎么申请内存呢?又是怎么释放内存呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·

(如果是平时的指针的结构体的话,应该是这样的吧?vector = (ScPoint *)malloc(sizeof(ScPoint) * 10);
释放是 直接 free(vector); 还是需要一个个的释放 vector 里面的 ScPoint呢? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~额 当然,也不是指针。。。数组的话,又是怎么申请、释放内存呢?)

[解决办法]
首先呢,建议楼主不要把函数的名称和变量名称搞成一样的。看的别扭。
数组,变量什么的直接定义就可以了,其存储在栈区间内;如果你使用指针需要使用malloc进行动态分配内存,存储在堆空间内
[解决办法]
第一个问题:
C/C++ code
typedef struct _ScPoint{    int x;    int y;}ScPoint;inline ScPoint scPoint(int x, int y){    ScPoint p;    p.x = x;    p.y = y;    return p;}int main(){    ScPoint p = scPoint(3,4);    printf("%d-%d\n",p.x, p.y);}//3-4,  这样是可以的
[解决办法]
1楼的很正确:数组,变量什么的直接定义就可以了,其存储在栈区间内;如果你使用指针需要使用malloc进行动态分配内存,存储在堆空间内


ScPoint vector[10];在函数结束的时候就空间自动释放,
[解决办法]
探讨

引用:

首先呢,建议楼主不要把函数的名称和变量名称搞成一样的。看的别扭。
数组,变量什么的直接定义就可以了,其存储在栈区间内;如果你使用指针需要使用malloc进行动态分配内存,存储在堆空间内




如果我需要使用的数组是 全局 的~~

比如定义全局变量 ScPoint vector[10];

然后某个函数中
add_to_vector(v……

[解决办法]
提供拷贝构造函数和赋值函数
[解决办法]
探讨

首先呢,建议楼主不要把函数的名称和变量名称搞成一样的。看的别扭。
数组,变量什么的直接定义就可以了,其存储在栈区间内;如果你使用指针需要使用malloc进行动态分配内存,存储在堆空间内

读书人网 >C语言

热点推荐