【发布时间】:2020-10-03 22:08:44
【问题描述】:
我想我有一个初学者的疑问。我不知道这是不是一个很愚蠢的问题,但这两种情况有什么区别:
通用结构:
typedef struct {
void* data;
} Object;
第一种情况:这种情况在指针上分配内存,然后返回指针。
Object* NewObject1(const void* data) {
Object* This = (Object*)malloc(sizeof(Object));
memcpy_s(&This->data, sizeof(void**), &data, sizeof(void**));
return This;
}
第二种情况:在这种情况下,内存分配在用户指定的指针上。
void NewObject2(Object** This, const void* data) {
*This = (Object*)malloc(sizeof(Object));
memcpy_s(&(*This)->data, sizeof(void**), &data, sizeof(void**));
}
结果,其实是一样的:
int main(){
Object* a = NewObject1((void*)10);
printf("a->data = %d\n", (int)a->data);
Object* b = NULL;
NewObject2(&b, (void*)10);
printf("b->data = %d\n", (int)b->data);
return 0;
}
输出:
a->data = 10
b->data = 10
所以我的问题是:在第一种情况或第二种情况下分配内存之间有任何真正的区别。比如内存安全、性能等。
【问题讨论】:
-
两者的内存分配是一样的,唯一的区别是一个你返回一个指针,另一个你传入一个指向指针的指针并将它设置在那里。除了代码的清晰性之外,没有任何区别。
标签: c memory memory-management heap-memory low-level