ここでこの質問をする前に大規模な調査を行いましたが、答えが見つかりませんでした。
別の構造体の配列と合計を含む単純な構造体があります。
typedef struct {
int total;
struct Struct1 arrayOfStructs[];
} Struct2;
Struct2 _myVar; // the variable I need
arrayOfStructs[]
タイプの構造体を含む C 配列であるStruct1
必要があります (定数値が必要なため、この構文は無効です)total
のカウントですarrayOfStructs
- (
Struct1
関係ありません。いくつかのプリミティブデータが含まれているだけです)
問題は、この配列を動的にしたいということです。私はこれを行うことができるようにしたい:
for (int i = 0; i < _myVar.total; i++) {
NSLog(@"%d", _myVar.arrayOfStructs[i].index);
}
私は次のことを試しました:
typedef struct {
int total;
struct Struct1 *arrayOfStructs; // USING A POINTER HERE
} Struct2;
Struct2 _myVar; // the variable I need
および値を追加する場合:
int total = ++_myVar.total; // increase total count
_myVar.arrayOfStructs = realloc(_myVar.arrayOfStructs, total * sizeof(Struct1));
_myVar.arrayOfStructs[total - 1] = {1, 5.3}; // appending a new value in the array
上記のコードは値を正しく追加しますが、値を渡してNSData
取得した後、配列項目が失われ、最終的にいくつかの不適切なポインターが生成されます。
[NSData dataWithBytes:&_myVar length:sizeof(_myVar) + sizeof(Struct1) * total];
sizeof(_myVar) + sizeof(Struct1) * total
これは、ただの代わりに実行する必要があるためだと思われますsizeof(_myVar)
。そのため、ポインターアドレスが異なるため、最終的に不良データになります。データを構造に正しくコピーしていないと思います。
どんな助けでも大歓迎です!