この質問に対する正確な答えが見つからなかったので、それはばかげた質問か、単なる明白な質問です。未定義の動作が発生するかどうかを知りたいです。
私はいくつかの構造体型を定義しています:
typedef struct {
char string1[17];
char string2[33];
int someInt;
float someFloat;
} my_struct_t;
その構造体の複数のインスタンスが必要ですが (構造体配列にあるように)、オブジェクトの数はコンパイル時に不明です。
このように初期化するのは正しいですか?
my_struct_t *myStruct;
size_t noOfElements;
size_t completeSize;
int index;
/* ...code which sets the number of elements at runtime... */
completeSize = sizeof(my_struct_t) * noOfElements;
myStruct = malloc(completeSize);
memset(myStruct, 0, completeSize);
/* ...and then access it as if it were an array...*/
myStruct[index].someInt = 10; // index < noOfElements
これを行うのは安全ですか?memset()
気になるのはその部分です。