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

В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как прочитать информацию из файла http://www.cyberforum.ru/cpp-beginners/thread1129612.html
Здравствуйте. Есть программа, которая вычисляет определитель матрицы, но у неё проблемы с открытием файла // kurs1.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) {
C++ Нахождение количества нулей в матрице, используя подпрограммы Условие: Написать программу, использующую подпрограмму(функцию), аргументами которой является матрица А. Результат, возвращаемый подпрограммой - общее количество нулей в k-той и последней строках, k-том и последнем столбцах матрицы А, где k - заданное целое число(k больше одного, но меньше n). В моем случае k, количество строк, количество столбцов, элементы матрицы вводятся с клавиатуры в... http://www.cyberforum.ru/cpp-beginners/thread1129609.html
C++ Конвертер валют. Не выводится ответ
// 5.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include "iostream" #include "windows.h" #include "string.h" using namespace std; int _tmain(int argc, _TCHAR* argv) {
В словаре найти слова которые могут быть полностью сложены из других слов,сцепление слов C++
В словаре найти слова которые могут быть полностью сложены из других слов,сцепление слов(конкатенация)
C++ Программа не выводит ответ http://www.cyberforum.ru/cpp-beginners/thread1129581.html
#include "stdafx.h" #include "iostream" #include "windows.h" #include "string.h" using namespace std; int _tmain(int argc, _TCHAR* argv) { SetConsoleOutputCP(1251); int b; char a,c; double k=0;
C++ Вычислить с точностью eps>0 Помогите,пожалуйста,с заданием: Вычислить с точностью eps>0: y=1-x^2/2!+x^4/4!-...+(-1)^n*x^(2n)/(2n)!+... Проверка:y=cos(x).Написать на языке C++. Заранее спасибо! подробнее

Показать сообщение отдельно
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
25.03.2014, 20:39     В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение"
Цитата Сообщение от ilyhan2009 Посмотреть сообщение
а как правильно?
Сначала поясню почему вот это неправильно:
C++
1
2
3
4
5
6
_str()
{  
    len = 1;
    str = new char;
    str[0] = '\0';
}
Во-первых обычно семантика подсчета длины строки не подразумевает учет завершающего нуля. То есть строка в которой только '\0' имеет длину 0.
Во-вторых в случае, когда у тебя создалась пустая строка и больше в нее ничего не записывалось данный код приводит к неопределенному поведению при вызове деструктора. Т.к. delete [] предполагает, что удаляется массив, однако у тебя выделялся только один символ.
Поэтому лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    _str()
    {  
        len = 0; // в строке нет значащих символов
        str = new char[1];
        str[0] = '\0';
    }
     _str(char ch)
    {   cout<<"\n _str(char ch)";
        len = 1; // надо 1, вместо 2
        str = new char[2];
        str[0] = ch;
        str[1] = '\0';
    }
    _str(char const *temp_str) // не забываем про const, мы же не меняем строку temp_str
    {   cout<<"\n _str(char *temp_str)";
        len = strlen(temp_str); // а вот здесь все правильно
        str = new char[len+1];
        strncpy(str, temp_str, len);
        str[len] = '\0';
    }
Добавлено через 2 минуты
Цитата Сообщение от ilyhan2009 Посмотреть сообщение
у меня тогда copy_str в теле констр. копирования подчеркнут красным и написано:
Потому что остальной код тоже надо в порядок приводить. Например функции get_len и get_str должны быть const:
C++
1
2
3
4
5
6
7
8
9
    int get_len() const
    {
        return len;
    }
  
    char *get_str() const
    {
        return str;
    }
 
Текущее время: 20:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru