包含动态数组的不透明c结构



这是为包含动态数组的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。此外,像这样的大多数程序也将数组的大小存储在结构中,这样您就可以编写更通用的代码,确保它不会超出分配的空间。

相关内容

  • 没有找到相关文章

最新更新