Эта программа выходит из строя, и я не могу найти никаких нелегальных действий относительно получения содержимого массива и указателя перемещения. Что не так?Перемещение указателя в массиве
#include <iostream>
#include <stdint.h>
using namespace std;
int main(int argc, char ** argv) {
int * p = new int [20];
for(int i=0 ; i<20 ;i++)
{
p[i]=i;
}
for(int i=0 ; i<20 ;i++)
{
printf("%d ",*p);
p++;
}
delete [] p;
return 0;
}
Вопрос: Почему вы используете 'новый' в первую очередь? Вы получаете много дополнительных возможностей, чтобы получить в значительной степени результат, который вы получите, просто сделав '' 'массив /' std :: vector'/'std :: array' local для' main'. Вы получили много советов о том, как свести «новый»/'delete' от сбоя, но никто не указывает, что вы не должны использовать их для начала (и даже если вам нужны« новые »возможности , вы должны смотреть на 'make_shared' и' make_unique' вместо прямого использования 'new'). –
@JerryCoffin позвольте мне ответить на это - в основном потому, что большинство книг, ресурсов, курсов C++ (даже университетских) по-прежнему предпочитают показывать, как реализовать связанный список на C, а затем скомпилировать его с помощью компилятора C++. Люди все еще учат других людей чувствовать себя комфортно внутри «C гетто» (как назвал его Бартош Милевски). –