Почему это работает?
#include <iostream>
using namespace std;
int main() {
float* tab[3];
int i = 0;
while(i < 3) {
tab[i] = new float[3-i];
i++;
}
cout << tab[2][7] << endl;
tab[2][7] = 6.87;
cout << tab[2][7] << endl;
i = 0;
while(i < 3)
delete[] tab[i];
}
а эта нет?
#include <iostream>
using namespace std;
int main() {
float* tab = new float[3];
cout << tab[7] << endl;
tab[7] = 6.87;
cout << tab[7] << endl;
delete[] tab;
}
Я пробовал обе программы на Win XP с MS VS 2008, обе скомпилированы без ошибок, и первая работала без ошибок . Во втором появилось всплывающее окно с ошибкой, однако я не могу его вспомнить и не могу воспроизвести (на данный момент нет доступа к Windows).
Я пробовал их также в Linux (Kubuntu 10.10 с предварительно скомпилированным пакетом ядра версии 2.6. 35.23.25) с g ++, и оба компилируются и запускаются без ошибок.
Почему? Разве не должно быть всплывающих окон с чем-то вроде «Неправильный доступ к нераспределенной памяти»?
Я знаю, что он должен (и, к счастью, компилируется) без ошибок, но я подумал, что он не должен работать без них .. . И почему второй пример дает ошибки в Windows, а не в Linux?