C инициализация структуры программирования - PullRequest
0 голосов
/ 15 октября 2018

Скажем, я определил следующую структуру и имею следующий код:

struct PVS{
    int* values; 
}; 

struct PVS** pvs = (struct PVS**) malloc(9 * sizeof(struct PVS*)); 
int i; 
for(i = 0; i < 9; i++){
    pvs[i] = (struct PVS*) malloc(9 * sizeof(struct PVS)); 
}

int j,k; 
for(j = 0; j < 9; j++){
    for(k = 0; k < 9; k++){
        int* val = pvs[j][k].values; 
    }
}

Что произойдет, если я попытаюсь получить доступ к pvs [j] [k]?Какой тип ошибки мне выдаст компилятор?

1 Ответ

0 голосов
/ 15 октября 2018

Ошибка не возникнет, но элементы values не инициализированы, поэтому val будет иметь произвольное содержимое.Вы вызываете так называемое неопределенное поведение (UB).Что-нибудь действительно может произойти, и не будет отображаться никаких ошибок - вам повезет, если вы получите доступ к val.

Лучше всего создать функции конструктора, которые могут создавать один PVS, а другой - их массивы, для произвольного числа измерений.Таким образом, вы не будете повторять один и тот же код снова и снова.По сути, вы будете реализовывать многомерный векторный контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...