Спасибо всем.) Проблема оказалась проще: опечатка - кое что прибавил не там, отсюда, и непонятное поведение. Сделал паузу, пересмотрел на свежую голову весь код внимательнее и нашёл.
Но хорошим тоном было бы и здесь вызывать delete[], чтобы код читать проще было, не гадая, какого рода память здесь освобождается, массив или одиночный объект.
Так и сделал.
может в С++ есть более рациональный способ переопределения размера массива, типа realloc?
Так четверка
calloc,
malloc,
free,
realloc никуда не делась из C++ (по крайней мере, в стандарте ISO/IEC 14882 она присутствует). Просто объявления перекочевали из
<stdlib> в
<cstdlib>. В данном случае будет вполне уместно их применение, если заранее неизвестно, до каких размеров вырастет "массив массивов".
Нету возможности отказаться от механизма: new-delete, так как не все компоненты написаны мною. В то же время побаиваюсь использовать и то, и то совместно. В моём понимании это может приводить к ошибкам - два разных менеджера памяти. Но, даже, если современные библиотеки обеспечивают совместимость между собой, всё равно проще обеспечить гарантию чёткости работы использованием одного механизма.
В стандартных менеджерах памяти С++, насколько я знаю, нету способа узнать размер массива. sizeof эффективен только на одном элементе и на структуре.
sizeof, я так понимаю, директива компилятора - посчитать заранее размер статичной структуры, и, далее, просто записать его в программу, как число.