Почему здесь переполнение массива возвращает 0? - PullRequest
0 голосов
/ 09 июля 2020
#include <stdio.h>

void ModifyArray(int *ptr1, int *ptr2, int *ptr3) {
   for(int i = 0; i<4; i++) {
      ptr3[i] = ptr1[i+0] - ptr2[i+3];
   }
}

int main() {

   int Array1[6];
   int Array2[6];
   int Array3[6];

   ModifyArray(&Array1[0], &Array2[0], &Array3[0]);

   printf("%d\n", Array2[6]);

   return 0;
}

Экспериментируя с неопределенным поведением массива, я заметил, что, когда я использую функции ModifyArray(&Array1[0], &Array2[0], &Array3[0]); и go за пределами Array2, Array2[6] всегда возвращает 0. Когда я удаляю функцию, Array2[6], как и ожидалось, возвращает случайное число. Почему создание функции ModifyArray приводит к переходу Array2[6] в go от неопределенного поведения к 0?

1 Ответ

0 голосов
/ 09 июля 2020

Почему создание функции ModifyArray вызывает Array2[6] в go из неопределенного поведения в 0?

Ну, значение 0 или любое другое значение, если на то пошло, является результатом неопределенного поведения . Тот факт, что значение равно 0, не означает, что это четко определенное поведение. Это все еще неопределенное поведение.

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