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

Null pointer assignment. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Литература по WebBrowser для C++ http://www.cyberforum.ru/cpp-beginners/thread344787.html
Подскажите учебник по использованию компонента WebBrowser для С++.Т.к мне на МСДН нечего не понятно - я еще новичек , или названия книжек где хотя бы в не которых главах описывают за WebBrowser.
C++ Общие вопросы для реальной работы Привет! Скажите пожалуйста на сколько рально самостоятельно изучить С++, что бы потом работать обычным программистом и иметь спрос работодателей на рынке труда? http://www.cyberforum.ru/cpp-beginners/thread344783.html
C++ Генерация последовательности случайных чисел
можно ли считать что при генерации последовательности случайных чисел с помощью функций srand и rand при одном и том же начальном значении всегда будет генерироваться одна и таже последовательность, в том числе на разных компьютерах?
Отправка содержимого текстового файла на почту C++
Добрый вечер. Есть код сендера: IdSMTP1->AuthenticationType=atLogin; IdSMTP1->UserId = "qwerty@yandex.ru"; IdSMTP1->Password = "****"; IdSMTP1->Host = "smtp.yandex.ru"; IdSMTP1->Port = 25;
C++ Ошибка приведенного оператора, альтернативы http://www.cyberforum.ru/cpp-beginners/thread344758.html
4.31 Чем ошибочен приведенный ниже оператор? Напишите правильный оператор, который бы выполнял то, что пытался, вероятно, сделать программист. cout « ++( х + у ); Попробовал выдает ошибку, решил сделать так #include "stdafx.h" #include <iostream> int main()
C++ Не могу исправить ошибку :113 H:\Dev-Cpp\Проекты\уроки\Безымянный3.cpp cannot convert `IDirectDraw7**' to `IDirectDraw**' for argument `2' to `HRESULT DirectDrawCreate(GUID*, IDirectDraw**, IUnknown*) Недавно начал изучать оконные программы и работу с DirectX. Но при написании программы столкнулся с проблемой: не могу исправить одну ошибку...Хотя код вроде бы верный.Пожалуйста помогите,уважаемые форумчане.Вот текст ошибки:113 H:\Dev-Cpp\Проекты\уроки\Безымянный3.cpp cannot convert `IDirectDraw7**' to `IDirectDraw**' for argument `2' to `HRESULT DirectDrawCreate(GUID*, IDirectDraw**,... подробнее

Показать сообщение отдельно
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
24.08.2011, 00:46     Null pointer assignment.
Проблема вот в чём.
В строке 26 функция up() создаёт временный объект String (из указателя). Дальше этот временный объект используется для создания s2 с помощью конструктора копирования. Затем временный объект уничтожается.
А теперь сама проблема: конструктор копирования, созданный компилятором, копирует только указатель, но не само содержимое строки. После удаления временного объекта копия указателя в новом объекте указывает на уже удалённую область памяти.
Выход: определить свой конструктор копирования, который будет осуществлять "глубокое копирование", то есть скопирует не указатель, а саму строку.

Добавлено через 15 минут
Цитата Сообщение от Stalin45 Посмотреть сообщение
возвращая указатель на строку
Цитата Сообщение от Stalin45 Посмотреть сообщение
Вот только почему передается не ссылка, а само значение строки
Ну во-первых всё-таки указатель, а не ссылку.
Во вторых, функция объявлена как возвращающая String, поэтому создаётся временный оъект. А поскольку конструктор объявлен без explicit, то осуществляется неявное преобразование из указателя.
Проблема должна уйти, если объявить функцию up() как возвращающую указатель, но тем не менее конструктор копирования для такого класса в любом случае нужен.

Добавлено через 2 минуты
И ещё, в конструктор было бы правильнее принимать указатель на константную строку, то есть
C++
1
String(const char* str)
или
C++
1
String(char const* str)
что одно и то же.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru