Я пытаюсь справиться с malloc
, и до сих пор я получаю неожиданные результаты, когда тестирую и играю с ним.
int main(int argc, char** argv)
{
int size = 10;
int *A;
A = (int *)malloc(size * sizeof(int));
for (int i = 0; i < 10000; i++)
{
A[i] = i;
}
for (int i = 0; i < 10000; i++)
{
printf("%d) %d\n", i, A[i]);
}
}
Например, в приведенном выше примере кода код выполняется без ошибок. Несмотря на то, что я выделил A
только для 10 * int, я ожидал, что цикл будет выполнен только 10 раз, прежде чем произойдет ошибка. Если я увеличу цикл примерно до 30-40 Кбайт, он попадет в ошибку сегментации. Однако, если я увеличу свой размер до величины цикла, она всегда будет работать так, как ожидалось. Так что я знаю, как избежать ошибки .. вроде, я просто надеялся, что кто-то может быть настолько любезен, чтобы объяснить, почему это так.
Edit: Оказалось, я не оценил, что C не обнаруживает вне границ, Java и C ++ слишком много заботили меня. У меня было неопределенное поведение , и теперь я знаю, что моя работа - предотвращать их. Спасибо всем, кто ответил.