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 してから、構造体の double の配列にスペースを割り当てます。実際問題として、メモリを使用する前に、必ず malloc() からの戻り値を NULL でテストする必要があります。また、このようなほとんどのプログラムは配列のサイズも構造体に格納するため、割り当てられたスペースの最後から実行されないようにする、より一般的なコードを作成できます。

于 2013-02-23T20:53:16.250 に答える