Форум программистов, компьютерный форум 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**,... подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
24.08.2011, 21:22     Null pointer assignment.
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Герб Саттер приводит много более элегантную реализацию операции присваивания:
C++
1
2
3
4
5
6
Листинг 3.12. Реализация операции присваивания "по Саттеру"
TArray& TArray::operator=(const TArray &t)
{ TArray temp(t);       // временнный локальный объект temp = t
  Swap(temp);           // обмен полями с текущим объектом
  return *this;             // возврат текущего объекта
}                   // temp уничтожен
Swap - это функция обмена. Часто можно использовать std::swap().
Нельзя использовать std::swap, так как в вашем примере используется синтаксис для вызова функции swap - члена класса.

Добавлено через 7 минут
Цитата Сообщение от Stalin45 Посмотреть сообщение
Здравствуйте. Такая проблема: Пытаюсь вызвать функция класса Up()
s2 = s1.up(), возвращая указатель на строку (по-умолчанию в s2 пустая строка имеет адрес NULL).
Вот только почему передается не ссылка, а само значение строки, поскольку компилятор пишет: null pointer assignment. Значит ссылка не поменялась, и он, не выделив память, прострочил прямо с нулевого адреса...
И второй вопрос, как можно в данном случае все-таки передать значение (хотя первый вопрос в силе), но так, чтобы выделить точное кол-во памяти под передаваемую строку в s2?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "iostream.h"
#include "CONIO.h"
#include "Ctype.h"
#include "string.h"
using namespace std;
class String
{
 private:
  char* st;
 public:
  String(): st(NULL) {}
  String(char* str) {int len = strlen(str);
             st = new char[len+1]; strcpy(st, str);
            }
  ~String() {delete st;}
  void show()const {cout<<endl<<st;}
  String up() {int len = strlen(st);
           for(int i=0; i<len; i++) st[i] = toupper(st[i]); return st;
          }
};
///////////////////
int main()
{
 String s1 = "Test yes TEsT";
 String s2;
 s2 = s1.up();
 s2.show();
 getch();
return 0;
}
Заранее благодарен!
У вас тут несколько ошибок. первое - у вас не определен конструктор копирования. Второе - у вас нет определения оператора присваивания. Третье - в деструкторе вы вместо delete выражения должны использовать delete [] выражение, так как вы должны удалить массив. Четвертое - в функции up вы не делаете проверку на то, что ваш указатель равен NULL.

Саму функцию up можно написать проще.

C++
1
2
3
4
5
6
7
8
9
String String::up() const
{
   if ( st )
   {
      while ( *st ) *st = toupper( *st );
   }
 
   return ( st );
}
 
Текущее время: 04:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru