Я тестировал некоторый код для класса, который обертывает 2-мерный массив struct
.Почему этот доступ не связан с segfault?
WrapperClass x;
SomeStruct try1 = x.at(0, 0);
SomeStruct try2 = x.at('a', 1);
SomeStruct array[] = {try1, try2};
// There were originally 3 of these test variables above, but I forgot to
// change the loop upper bound when I deleted one
for (int i = 0; i < 3; i++) {
// I added this line after noticing the non-error
std::cout << &array[i] << '\n';
std::cout << array[i].property1 << '\n';
std::cout << array[i].property2 << '\n';
std::cout << array[i].property3 << '\n';
std::cout << "-\n";
}
return 0;
Это выходы:
0x7ffdadface08
0
0
0
-
0x7ffdadface14
0
0
0
-
0x7ffdadface20
0
0
0
Почему этот код выдаёт ошибку сегментации с «доступом из границ» ошибки или что-то? Я создал только 2 структуры в массиве; почему вдруг появляется третий, который я могу свободно и безопасно получить?
Просьба предоставить полный тестовый пример, чтобы воспроизвести это поведение! –
Не требуется, и автоматическая проверка границ будет платить за то, что вам не нужно в каждом случае. – chris
Это пример, почему магические числа - это плохая вещь. Вместо 3-х в коде вы должны где-то определить константу. –