Печатные значения структуры не показывают правильные значения - PullRequest
0 голосов
/ 09 марта 2019

Это мой код:

struct mys {
    double d[128];
};

int main() {
    int iters = 2;
    struct mys a[iters];

    for(int i = 0; i < iters; i++) {
        a[i].d[0] = (double)i;
    }

    for(int j = 0; j < 128; j++) {
        printf("%f\n", a[0].d[j]);
    }
}

Когда я запускаю это, это некоторые из средних значений:

0.000000 11711905921668651127245114035463936382624607367372861618952521785051367817533820282282998171146926539504166684405188272240881137800884065610400809119241048416797589504.000000 0.000000 0.000000 0.000000 0.000000

и печать a[1] также показывает -0.000 в середине. Почему это?

1 Ответ

1 голос
/ 09 марта 2019

Ваш код инициализации неверен. У вас есть массив в стеке struct mys, объявленный как размер 2, и вы индексируете в нем большие размеры (после редактирования) для доступа к неинициализированным элементам. Это неопределенное поведение. Все может случиться.

Используйте вложенный цикл for для инициализации следующим образом:

    for(int i = 0; i < iters; i++) {
        /* since we have a struct with an array, initialize each element using a nested for loop. */
        for(int j = 0; j < 128; j++) {
            a[i].d[j] = (double)i;
        }
    }

Возможно, вы намеревались вместо этого использовать этот вложенный цикл (у каждого элемента свое значение):

    for(int i = 0; i < iters; i++) {
        /* since we have a struct with an array, initialize each element using a nested for loop. */
        for(int j = 0; j < 128; j++) {
            a[i].d[j] = (double)j;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...