C ++ Pointer Snippet - PullRequest
       27

C ++ Pointer Snippet

2 голосов
/ 15 февраля 2009

Приветствую всех. Это мой первый вопрос здесь, на stackoverflow, поэтому, пожалуйста, потерпите меня.

Мой семестр программирования в этом семестре - Java; последний семестр был C ++. Мой учитель Java считает (оправданно, я думаю), что для нас, учеников, очень важно понимать механизм управления памятью.

Поскольку в Java имеется автоматическая сборка мусора, он счел целесообразным дать нам задание, в котором мы должны написать очень простую программу на C ++, которая создает двумерный массив с использованием указателей. В частности, мы должны сначала создать массив указателей; каждый указатель в первом массиве должен ссылаться на свой собственный массив целых чисел. Затем мы должны освободить память, связанную с двумя массивами.

Предполагается, что это назначение состоит из двух функций: одна для выделения двумерного массива, а вторая для освобождения. Я просто хочу убедиться, что следующий код логически обоснован, прежде чем я продолжу.

Я уверен, что все это кажется очень простым, но загвоздка в том, что мой учитель C ++ потратил все два дня на указатели. Хотя я в некоторой степени понимаю механику, я довольно не разбираюсь в реализации. При этом, следующее очень грубое начало. Это логично звучит? Я полностью не в курсе? Заранее благодарю за любую помощь.

РЕДАКТИРОВАТЬ: я создал новый вопрос с обновленным кодом. Вы можете просмотреть его, нажав Здесь .

Ответы [ 5 ]

2 голосов
/ 15 февраля 2009

Это хорошо заданный вопрос.

Не думаю, что я бы назвал это "двумерным массивом": это массив массивов, а не двумерный массив.

Я думаю, что я бы назвал мой индекс i или iColumn или iRow вместо nCount (ваши nRows и nColumns логически постоянны и используются в качестве значений ограждения / верхней отметки тогда как ваш nCount является индексом цикла).

Для получения бонусных баллов подумайте о том, как протестировать свое решение. Вы можете запустить его, чтобы увидеть, если он ошибается ... но обратное, то есть не ошибочное, не является доказательством его правильности. На каком O / S вы его запускаете? Если вы используете Linux, то стоит проверить ваш код, используя valgrind (потому что, когда вы его запускаете, valgrind может автоматически обнаруживать множество способов неправильного использования памяти).

2 голосов
/ 15 февраля 2009

Когда вы используете

int* i = new int;

Вы соединяете это с

delete i;

и при использовании

int* i = new int [12];

Вы связываете это с

delete [] i;

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

2 голосов
/ 15 февраля 2009

Мне кажется правильным, за одним исключением - при удалении массивов вам нужен следующий синтаксис:

delete [] arrayName;
0 голосов
/ 15 февраля 2009

Звучит выглядит (логично). Между прочим - это нормально, чтобы запустить программу и у нее не получилось. : -)

0 голосов
/ 15 февраля 2009

Вам нужно использовать delete [] вместо просто delete.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...