Прежде всего: я знаю, что new
- это способ C ++ сделать это. Я просто показываю, что есть несколько способов воспроизвести эту ошибку, и оба невероятно расстраивают.
У меня есть две формы этого исходного файла. Я пытаюсь отладить еще одно задание на программирование, но я не прошу помощи по этому вопросу. По сути, я пытаюсь повторно реализовать set
как класс с полями для размера и указателем на массив int
. Вот код, использующий new
:
testnew.cpp
int main()
{
int size = 1;
int *elements = new int[size];
elements[0] = 0;
size++;
int * temp = new int[size];
for (int i = 0; i < (size - 1); i++)
{
temp[i] = elements[i];
}
delete[] elements;
temp[size] = size;
elements = temp;
elements[1] = 1;
delete[] elements;
}
и снова, используя менее предпочтительные alloc
функции:
testalloc.cpp
int main()
{
int size = 1;
int * elements = (int *) malloc(sizeof(int) * size);
elements[0] = 0;
size++;
elements =(int *) realloc(elements,size * sizeof(int));
elements[1] = 1;
free(elements);
}
В обоих случаях моя цель - создать массив, а затем добавить к нему. Однако в обоих случаях, после сборки и запуска в Visual Studio 2010, массив вообще не увеличивается и имеет только 1 «слот» для моих элементов, чтобы войти в . В отладчике VS я наблюдаю за указателем массива elements
; прикреплен скриншот. Он одинаков для обеих версий кода.
- точка останова при вызове delete[]
/ free()
.
Серьезно, что я делаю не так? Это должно быть логической ошибкой, и я пролистал четверть дюжины примеров malloc
/ realloc
и new
, прочитал и перечитал мой учебник, и я не вижу, в чем дело!
Мне кажется, что у меня должна быть строка, которая разбивает выделенную память на массив, но разве вызов new int[]
не делает этого?