这是为包含动态数组的c结构分配内存的正确方法吗?特别是,我为myStruct分配内存的方式是正确的,考虑到还不知道结构实际有多大?
//test.h
struct Test;
struct Test * testCreate();
void testDestroy(struct Test *);
void testSet(struct Test *, int);
//test.c
#include <stdlib.h>
struct Test{
double *var;
};
struct Test * testCreate(int size){
struct Test *myTest = (struct Test *) malloc(sizeof(struct Test));
myTest->var = malloc(sizeof(double)*size);
return(myTest);
}
void testDestroy(struct Test * myTest){
free(myTest->var);
free(myTest);
}
void testSet(struct Test * myTest, int size){
int i;
for (i=0;i<size;++i){
myTest->var[i] = i;
}
}
答案 0 :(得分:1)
struct
具有固定的大小,这就是sizeof
返回的内容。
你的struct有on元素,一个双指针,并且有一个(平台相关的)固定大小。
您的testCreate
功能正常运行。如果您不知道动态分配部分的大小,可以将指针设置为NULL
以表示必须稍后分配内存。
答案 1 :(得分:0)
是的,你正确地为结构建立了malloc空间,然后是结构中双精度数组的空间。实际上,在尝试使用内存之前,应始终测试malloc()的返回值是否为NULL。此外,大多数这样的程序也会在结构中存储数组的大小,因此您可以编写更多通用代码,以确保它不会在分配空间的末尾运行。