Вы не сбросили p до его начального значения между двумя циклами.Второй цикл не очищает начальный p, он портится со случайной памятью после памяти, выделенной для начального p.
Я предлагаю вам использовать (*(p + i))
или (p + i)->
или p[i]
вместо (*p++)
.Или, что еще лучше, используйте vector<vector<char> >
.И вместо того, чтобы заменить местным вектором.используйте функцию-член clear ().
Редактировать: Вот две хорошие реализации
vector<char>* p = new vector<char>[1024];
for( size_t i = 0; i < 1024; i++ ){
p[i].resize(1024 * 1024);
}
sleep(5);
cout << "start to clear" << endl;
for( size_t i = 0; i < 1024; i++ ){
p[i].clear();
}
delete [] p;
cout << "clear over!" << endl;
sleep(5);
vector<vector<char> > p(1024);
for( size_t i = 0; i < 1024; i++ ){
p[i].resize(1024 * 1024);
}
sleep(5);
cout << "start to clear" << endl;
for( size_t i = 0; i < 1024; i++ ){
p[i].clear();
}
cout << "clear over!" << endl;
sleep(5);