Удаление указателя на массив

В одном из моих больших проектов я столкнулся с проблемой удаления массивов, которые были инициализированы без заданного размера.
Я написал простую программу, чтобы проверить, что идет не так, вот код

#include "stdafx.h"
class Checker
{
public:
Checker()
:myI(i++){}

virtual ~Checker(){
printf("%i " , myI);
fflush(stdout);
}
private:
int myI;
static int i;
};

int Checker::i = 0;int _tmain(int argc, _TCHAR* argv[]){
Checker* somePointer;
Checker* anotherPointer;

somePointer = new Checker[4]{
Checker(), Checker(), Checker(), Checker()};

anotherPointer = new Checker[]{
Checker(), Checker(), Checker(), Checker()};

delete[] somePointer;

delete[] anotherPointer; //approach A
delete anotherPointer; //approach B
//in approach C anotherPointer is not deleted

return 0;
}

Как вы можете видеть, elsePointer инициализируется без явно определенного размера.
Конечно, только одна из линий, помеченных как подход, активна одновременно.
В подходе А вывод выглядит так (< crash> означает, что программа неожиданно завершается)

 3 2 1 0 <crash>

В подходе B вывод

 3 2 1 0 4 <crash>

В подходе C некоторое время выводится 3 2 1 0, а в другое время происходит сбой приложения без печати чего-либо.

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

Я использую Visual Studio Pro 2013, обновление 4 (MSVC ++)

РЕДАКТИРОВАТЬ
В случае, если нет решения этой проблемы, кроме явного указания размера, мой вопрос
Почему эта «особенность» вообще реализована в MSCC ++?

2

Решение

В настоящее время стандарт C ++ не позволяет размещать массивы без явно определенного размера (как вы можете в Java или C #). GCC C ++ и Clang выдают ошибку при попытке компилировать ваш код (даже в режиме C ++ 14). Visual Studio 2015 RC также производит error C3078: you cannot 'new' an array of unknown bounds, Подводя итог, это не особенность, это ошибка в VS 2013, которая, по-видимому, была исправлена ​​в VS 2015.

2

Другие решения