Форум программистов, компьютерный форум, киберфорум
Наши страницы

realloc - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу определения минимального среди 5 введенных целых чисел. http://www.cyberforum.ru/cpp-beginners/thread288292.html
Плз помогите составить текст программы,на Си Обход. Составить программу определения минимального среди 5 введенных целых чисел.
C++ Перегрузка виртуальных функций please HELP! перегружаю виртуальную функцию в абстрактном классе. class ONE { virtual std::string FUN(const std::string& value); virtual ~ONE(); } http://www.cyberforum.ru/cpp-beginners/thread288286.html
Массивы и указатели C++
Здравствуйте! Задача по теме указатели.Есть 2 массива размер которого получаем от пользователя. Написать функцию которая получает 2 массива и создает третий массив, размером первый + второй. В main...
C++ Структуры
Сформировать массив, содержащий сведения о количестве изделий категорий A,B,C, собранных рабочим за месяц. Структурный тип содержит поля: фамилия сборщика, наименование цеха, количество изделий по...
C++ Постфиксный, и префиксный экземпляры оператора приращения: в чем разница? http://www.cyberforum.ru/cpp-beginners/thread288254.html
постфиксный, и префиксный экземпляры оператора приращения в чем разница? i++ ++i ??
C++ Добавить элементы в очередь, найти максимальный элемент Нужна Ваша помощь! пожалуйста, помогите доработать программу, а то у меня совсем ничего не получается(( задача такая: в файле лежат элементы. добавить в очередь. найти максимальный элемент. Спасибо... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1702 / 889 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
04.05.2011, 13:29
Дело обстоит так. Рассмотрим строчку:
C++
1
buffer[_size] = val;
Так вот, имеем типичный конструктор присваивания. То есть объекту типа string
C++
1
buffer[_size]
мы присваиваем значение другого объекта типа string; этот объект val
Но вся фишка в том, что объекта
buffer[_size] просто-напросто нет! Потому и возникает ошибка! Под него просто выделена память и всё на этом.
(Важно: конструктор присваивания присваивает значение в уже ИМЕЮЩИЙСЯ объект, в отличие от конструктора копирования.) А realloc объекта не создаёт, а просто выделяет под него место, в отличие от new! Поэтому тут надо работать с new

Небольшой опыт в домашней лаборатории сие подтверждает
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdlib.h>
#include <stdio.h>
 
class List
{
public:
        List() {printf ("ttttttttttttttt\n");};
};
 
int main () {
 
 
 
 List* p=(List*) malloc(sizeof(k));
 //List* p=new List[(sizeof(k))];
 
 getchar ();
}
Поочерёдно расскоментируя а закомментировывая инструкции выделения памяти, можно обнаружить, что строчка "ttttttttttttttttttttttttt" при одном запуске программы появляется, а при другом нет. То есть в одном случае срабатывает конструктор-объект создаётся (вариант с new) а в другом случае не срабатывает конструктор- объект не создаётся (вариант malloc)

А значит, во втором случае выражение
C++
1
2
List k;
p[0]= k;
будет неправильным, что и требовалось доказать.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru