У меня есть простая программа, которая объявляет целочисленный массив, размер для него, выделяет для него память на основе размера, инициализирует элементы и затем выводит каждый инициализированный элемент в массиве. Однако выход не является тем, что я ожидаю, и я не могу найти никакой документации, чтобы объяснить это. Я пост код и выход ниже:Array имеет больше значений, чем ожидалось
#include <iostream>
void main(int argc, char **argv)
{
int* a;
int size = 4;
a = new int[size];
for(int i = 0; i < size; i++)
{
a[i] = i + 1;
}
for(int i = 0; ; i++)
{
if(a[i])
{
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
else
{
break;
}
}
system("PAUSE");
}
- Выход:
- а [0] = 1
- а [1] = 2
- а [2] = 3
- а [3] = 4
- а [4] = -33686019
- а [5] = -1414812757
- а [6] = -1414 812757
- а [7] = -17891602
Указатель a не инициализирован правильно, что приводит к неопределенному поведению. Недавно выделенная память для указателя a не освобождена. Для утверждения нужно также исправить. Множество ошибок, которые необходимо устранить. –
Я объявил свой указатель a, позже определил его как новый массив размером 4 (воспользовавшись C++ 11, я считаю) и задал значения для ожидаемых элементов. Я понимаю, что я не удалял, что было просто лень с моей стороны. Если вы можете объяснить свои аргументы в пользу того, почему вы считаете, что инициализировано неправильно, я был бы признателен. – Aaron
Не инициализирующий указатель a правильно предоставит вам неинициализированный указатель/дикий указатель с неопределенным поведением или ошибкой ошибки сегментации. Решение: инициализировать указатель a до нуля или 0 перед распределением новой памяти. https://en.wikipedia.org/wiki/Segmentation_fault –