Форум программистов, компьютерный форум CyberForum.ru

Правильная инициализация ? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Можно ли разобрать экзешник? http://www.cyberforum.ru/cpp-beginners/thread1010691.html
есть проблема, мне нужно где то найти исходный код файлового менеджера mucommander и несколько видоизменить его, поменять название и некоторые иконки. как я могу это сделать?
C++ Создать программу, которая выводит на экран символьную матрицу создать прогу которая выводит на экран символьную матрицу. пример вывода. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * http://www.cyberforum.ru/cpp-beginners/thread1010688.html
получить машинные результатный сравнить их со значениями соответствующей функции C++
помогите написать программу! данные ниже выражения представляют собой формулы приближенного вычисления различных функций по разложению их в ряд Тейлора в окрестностях указных точек. В последующем после программирования получить машинные результатный сравнить их со значениями соответствующей функции, указной при каждой формуле(эту функцию в заданной точке вычислить также на ЭВМ.) _____∞ F=x+...
Дана целочисленная прямоугольная матрица. Определить: C++
2. Дана целочисленная прямоугольная матрица. Определить: а)количество столбцов, не содержащих ни одного нулевого элемента; b) характеристикой столбца целочисленной матрицы назовем сумму модулей его положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. Помогите пожалуйста!
C++ Вывести координаты http://www.cyberforum.ru/cpp-beginners/thread1010673.html
Как решить эту задачу? Капитан Флинт зарыл клад на Острове сокровищ. Он оставил описание, как найти клад. Описание состоит из строк вида: "North 5", где слово – одно из "North", "South", "East", "West", – задает направление движения, а число – количество шагов, которое необходимо пройти в этом направлении. Напишите программу, которая по описанию пути к кладу определяет точные...
C++ Выведите фамилии и имена учащихся в порядке убывания их среднего балла Помогите, пожалуйста, с решением, последний тест не проходит, пишет "превышено максимальное время работы". Вместо пузырька вставляли другие сортировки, ничего не помогло. Выведите фамилии и имена учащихся в порядке убывания их среднего балла. Формат входных данных Заданы сначала количество учащихся n, затем n строк, каждая из которых содержит фамилию, имя и три числа (оценки по трем... подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.11.2013, 23:40     Правильная инициализация ?
Ваш код, в студии, вот здесь исключение выбрасывает:
C++
1
2
3
4
5
6
7
8
ArrayOfInt::ArrayOfInt(int size)
{
    //delete [] p_; // удаление по неинициализированному указателю
    this->size_ = size;
    p_ = new int[size_];
    for (int i = 0; i < size_; i++)
        p_[i] = 0;
}
Если у вас нет исключения, то значит компилятор обнуляет неинициализированные указатели, но это всё равно кривизна кода.
Если у вас в классе есть поля-указатели, то обязательно определяют конструктор копирования и присваивания.
Вот здесь происходит присваивание объектов ArrayOfInt:
C++
1
2
3
4
5
6
7
8
9
SqArrayOfInt::SqArrayOfInt(int size)
{
    this->size_ = size;
    p_ = new ArrayOfInt[size_];
    for (int i = 0 ; i < size ; i++) {
        ArrayOfInt t(size);
        p_[i] = t; // присваивание
    }
}
Так как оператор присваивания не определён явно, то работает тот, который по умолчанию. Он просто копирует указатели. В данном случае, это указатель, который находится в локальном объекте t, и который уничнтожается при каждой новой итерации, при этом память, с которой связан указаетль в t, освобождается деструктором.

Добавлено через 11 минут
А для того, чтобы работало то, что предложил Peregrin, как раз нужен явно заданный конструктор копирования(для передачи объекта по значению). Хотя делать так, как предложил Peregrin необязательно. Объект локальный, но сохраняется в нелокальном объекте (arr), после чего становится уже ненужным.
 
Текущее время: 23:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru