【发布时间】:2015-06-28 19:21:23
【问题描述】:
我有一个结构:
struct generic_attribute{
int current_value;
int previous_value;
};
还有一个构造函数,它输出指向这个结构的指针:
struct generic_attribute* construct_generic_attribute(int current_value){
struct generic_attribute *ga_ptr;
ga_ptr = malloc (sizeof (struct generic_attribute));
ga_ptr->current_value = current_value;
ga_ptr->previous_value = 0;
return ga_ptr;
}
现在,在另一个函数中,我想定义一个指针并将其设置为指向与上述构造函数输出的指针相同的地址。
struct tagged_attribute* construct_tagged_attribute(int num_args, int *args){
...
struct generic_attribute* generic = malloc (sizeof(struct generic_attribute));
generic = construct_generic_attribute(args[0]);
...
}
在我看来,我在这里所做的是:
1) 我定义了一个“通用”指针并分配一个内存块来保存 generic_attribute 结构的实例。
2) 我调用一个函数construct_generic_attribute,在该函数中,程序再次分配一个generic_attribute 结构大小的内存块。它输出一个指向这个内存块的指针。
3) 在construct_tagged_attribute中,我设置“generic”指针等于construct_generic_attribute函数输出的指针,所以现在它们都指向同一个内存槽。
但是,我分配的内存似乎是我需要分配的两倍。
有没有办法让我只分配一次内存而不会因为未能为“通用”指针分配空间而出现分段错误?或者,我是否误解了这段代码中发生的事情?
【问题讨论】:
标签: c pointers memory memory-management allocation