1

这是为包含动态数组的 ac 结构分配内存的正确方法吗?特别是,考虑到还不知道结构实际上有多大,我为 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;
  }
}
4

2 回答 2

1

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

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

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

于 2013-02-23T20:49:19.063 回答
0

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

于 2013-02-23T20:53:16.250 回答