Я знаю, что «int * a = new int» используется для выделения памяти для хранения одного элемента типа int. «int * a = new int [5]» используется для выделения блока (массива) элементов типа int. Но когда я запускаю этот кодВ чем разница между «int * a = new int» и «int * a = new int [5]»?
int *a=new int;
for(int i=0;i<4;i++)
a[i]=i;
for(int i=0;i<4;i++)
cout<<a[i]<<endl;
Она работает без каких-либо ошибок, и показывает правильный вывод, поэтому, когда я должен использовать «Int * а = новый Int [5]»? Или они оба одинаковы с точки зрения использования? Я использую компилятор gnu C++ в кодовых блоках.
Это дает * неопределенное поведение *, и вы не можете положиться на его результаты. Это по существу доступ к массиву за пределами границ. Если вы Google, вы будете штрафовать другие сообщения [как здесь] (http://stackoverflow.com/questions/1239938/c-accesses-an-array-out-of-bounds-gives-no-error-why) –
Вы доступ к памяти, не выделенный вам. Это неопределенное поведение, и этот тип ситуации в основном уникален для языков C++ (и C). – PaulMcKenzie
Его схож с выполнением "int * a;" а затем использовать его. Он будет работать некоторое время, пока это не произойдет. –