Здесь представлена упрощенная версия двух структур у меня есть:статический инициализатор массива во время инициализации структуры
struct MyStruct1 {
double d;
}
struct MyStruct2 {
struct MyStruct1* a;
int i;
}
можно инициализировать второй-структуру следующим образом:
void InitStruct(struct MyStruct2 pMyStruct2) {
static struct MyStruct1 A[] = { {.d=12} , {.d=17} , {.d=1} };
*pMyStruct2 = (struct MyStruct2) { .a = A, .i = 3 };
}
но на самом деле я должен инициализировать его этот способ (потому что эта структура снова является частью более крупной структуры, которая должна быть инициализирована сразу):
void InitStruct(struct MyStruct2 pMyStruct2) {
*pMyStruct2 = (struct MyStruct2) {
.a = (struct MyStruct1[]) {
{.d=12} , {.d=17} , {.d=1}},
.i=3 };
}
Оба способа компилируются без каких-либо предупреждений , но данные во втором решении повреждаются.
Я думаю, что внутренний массив не является статическим, и поэтому .a
-показ немедленно становится недействительным.
Есть ли другой способ сообщить компилятору сохранить данные массива в памяти?
Данные не должны быть повреждены. В этом случае 'static' относится к привязке, а не к длительности хранения. Вы уверены, что вы не упрощаете что-то важное? – cnicutar
Где именно объявляется 'b'? Можете ли вы опубликовать небольшую программу, которая представляет проблему? – hmjd
Являются ли объявления на уровне файла или функцией/блоком? – Gauthier