这是为包含动态数组的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;
}
}
struct
具有固定大小,这就是sizeof
返回的值。
您的结构有一个元素,一个双指针,并且具有(依赖于平台的)固定大小。
testCreate
函数可以正确执行任务。如果您不知道动态分配部分的大小,可以将指针设置为NULL
,以表示以后必须分配内存。
是的,您正确地为结构分配了malloc空间,然后为结构中的双精度数组分配了空间。实际上,在尝试使用内存之前,应该始终测试malloc()的返回值是否为NULL。此外,像这样的大多数程序也将数组的大小存储在结构中,这样您就可以编写更通用的代码,确保它不会超出分配的空间。