包含动态数组的opaque c结构

时间:2013-02-23 20:44:16

标签: c malloc

这是为包含动态数组的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;
  }
}

2 个答案:

答案 0 :(得分:1)

struct具有固定的大小,这就是sizeof返回的内容。

你的struct有on元素,一个双指针,并且有一个(平台相关的)固定大小。

您的testCreate功能正常运行。如果您不知道动态分配部分的大小,可以将指针设置为NULL以表示必须稍后分配内存。

答案 1 :(得分:0)

是的,你正确地为结构建立了malloc空间,然后是结构中双精度数组的空间。实际上,在尝试使用内存之前,应始终测试malloc()的返回值是否为NULL。此外,大多数这样的程序也会在结构中存储数组的大小,因此您可以编写更多通用代码,以确保它不会在分配空间的末尾运行。