2015-02-14 2 views
-4

Я тестировал новый оператор в C++ как:Пинтер нового оператор C++

#include <iostream> 
using namespace std; 


int main() 
{ 

int *Q = new int[5]; 

Q[0] = 0; 
Q[1] = 1; 
Q[2] = 2; 
Q[3] = 3; 
Q[4] = 4; 


for (int i = 0; i < 7; i++) 
    { 
     cout << "Q[" << i << "] = " << Q[i] << endl; 
    } 
return 0; 
} 

Если вы заметили, в течение цикла я превышающий предел указателя, и я ожидал стек над потоком тип ошибки; но вместо этого он просто печатал, что когда-либо было у этих двух дополнительных мест.

Есть ли у кого-нибудь объяснения по этому поводу?

+3

Неопределенное поведение не определено; ничего или ничего не может произойти. – 5gon12eder

+2

Это просто неопределенное поведение. Вы не можете ожидать какого-либо конкретного результата от запуска этой программы. – juanchopanza

+0

Я понимаю, что эта программа ничего не делает (она предназначена для тестовой программы для «нового» оператора). Однако, если я пишу одну и ту же программу в C с помощью оператора malloc, я получаю ошибку переполнения при попытке получить доступ к Q [5] и Q [6]. – Anas

ответ

0

Да, происходит то, что ваша программа «уходит» от конца массива и печатает мусор. «Мусор» в этом контексте может быть любым в компьютере (память и т. Д.). У него нет защиты от подобных Java или Python.