То, как вы это делаете, не является «безопасным для памяти», потому что вы выделяете память только для одного целого числа и получаете доступ к последующим адресам, которые не были выделены. Это эквивалентно объявлению массива определенного размера и доступу к индексам, превышающим его размер. Есть несколько вариантов сделать то, что вы хотите:
Выделение памяти вручную
Используйте malloc()
, чтобы выделить необходимое количество байтов. После его использования вы должны использовать free()
. Компилятор не делает этого за вас.
int n=20;
int *a = malloc(sizeof(int) * n);
a[0]=1;
a[1]=1;
for(int i=2; i<n;i++){
a[i]=a[i-1]+a[i-2];
}
free(a);
Использование векторного контейнера C ++
Векторы - это массивы динамического размера. Они могут изменять размер автоматически и очень полезны. Подробнее здесь .
int n=20;
std::vector<int> a;
a.push_back(1);
a.push_back(1);
for(int i=2; i<n;i++){
a.push_back(a[i-1]+a[i-2]);
}
Редактировать: уточните, что нужно free()
после использования malloc()
.