Wpis z mikrobloga

Napisałem konwenter liczby binarnej do dziesietnej schematem Hornera. W C++ program działa, natomiast w Javie wyrzuca "ArrayIndexOutOfBoundsException". Byłbym wdzięczny za wskazówki, gdzie jest błąd.
#programowanie #cpp #java
Poniżej wrzucam kod z c++:

int p = 5;
int number[] = {1, 1, 0, 1, 0, 1};
int temporary[p];
int output[p];
int i = 1;

output[0] = number[0];
for (int j = 0; j < p; j++, i++) {
temporary[i] = (output[j])*2;
output[i] = number[i] + temporary[i];
}
----------------------------------------------------------
i z javy:

int p = 5;
int[] number = {1, 1, 0, 1, 0, 1};
int[] temporary = new int[p];
int[] output = new int[p];
int i = 1;

output[0] = number[0];
for (int j = 0; j < p; j++, i++) {
temporary[i] = (output[j]) * 2;
output[i] = number[i] + temporary[i];
}
  • 10
Owszem. Kompilator C++ pozwala na wychodzenie poza zakres w pewnych warunkach, jest to tzw. zachowanie niezdefiniowany (z ang. Undefined Behavior). Zapisuje to wtedy w nieustalonych obszarach pamięci. Jest to groźne, jeśli nie robi się tego celowo. Program może się zachować w różny sposób. U Ciebie przechodzi, ale gdzieś indziej może wysypać error. Nie masz gwarancji, że jutro to także będzie działać, czy kompilowane na innym komputerze. Jeśli C++ ma być też na