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

Почему программа вылетает при конкатенации строк? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверка столбцов на наличие одинаковых элементов http://www.cyberforum.ru/cpp-beginners/thread442109.html
Как осуществить в двумерном массиве проверку на наличие в столбцах одинаковых элементов, код программы не могу составить
C++ запретить нажатие клавиши Win Приветствую. Подскажите, как можно запретить нажатие клавиши Win?? Требуется чтобы приложение не реагировало на нажатие клавиши Win, и на сочитания Win+D , Win+M , Win+Tab. Как можно сее реализовать?О_о http://www.cyberforum.ru/cpp-beginners/thread442097.html
Вывести H — длину каждого отрезка... C++
Дано целое число N (> 1) и две вещественные точки на числовой оси: A, B (A < B). Отрезок разбит на N равных отрезков. Вывести H — длину каждого отрезка, а также значения функции F(X) = 1 – sin(X) в точ-ках, разбивающих отрезок : F(A), F(A + H), F(A + 2·H), …, F(B). cherez for!!!na zavtra nado!
C++ Преобразование ipv6 в бинарную строку
IPv6 адрес это 128-битный адрес. Он разделяется на части по 16 бит, которые преобразуются в 4-значные шестнадцатеричные числа и разделяются двоеточиями. Представление адресов IPv6 может быть еще более упрощено путем удаления начальных нулей в каждом 16-битном блоке. ля дальнейшего упрощения адресов IPv6 сплошные последовательности 16-битных блоков из нулей (0) в двухточечно-шестнадцатеричном...
C++ Используя один цикл, вывести все целые степени числа A от 1 до N. http://www.cyberforum.ru/cpp-beginners/thread442069.html
Дано вещественное число A и целое число N (> 0). Используя один цикл, вывести все целые степени числа A от 1 до N. cherez for!!!please help!
C++ Подсчитать количество строк, которые начинаются на букву «А» Создать программу которая выполняет следующие действия: 1) Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры. 2) Подсчитать количество строк, которые начинаются на букву «А» в файле F2. Добавлено через 49 минут Второе задание не обязательно. подробнее

Показать сообщение отдельно
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
07.02.2012, 12:12     Почему программа вылетает при конкатенации строк?
Собственно код
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
31
32
#ifndef __STRING
#define __STRING
 
#include <ostream>
 
class String
{
public:
    String();
    String(const char*);
    String(const String&);
    
    ~String();
    
    const String& operator= (const String&);
    const String& operator+= (const String&);
    
    String operator+ (const String&) const;
    
    bool operator== (const String&) const;
    bool operator!= (const String&) const;
    
    unsigned int length() const;
    
    friend std::ostream& operator<< (std::ostream&, const String&);
    
protected:
    char* array;
    unsigned int size;            
};
 
#endif
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "string.h"
#include <cstring>
 
String::String() :
    array(), size()
{
}
 
String::String(const char* instance)
{
    size = strlen(instance);
    array = new char[size + 1];
    
    strcpy(array, instance);
}
 
String::String(const String& instance) :
    size(instance.size)
{
    array = new char[size + 1];
    strcpy(array, instance.array);
}
 
String::~String()
{
   if (array)
   {
       delete[]array;
       array = NULL;
   }
}
 
const String& String::operator= (const String& instance)
{
    if (this == &instance)
        return *this;
       
    if (array && size != instance.size)
        delete[]array;
 
    if (size != instance.size)
    {
        size = instance.size;
        array = new char[size + 1];
    }
    
    strcpy(array, instance.array);    
    
    return *this;
}
 
String String::operator+ (const String& instance) const
{
    String result;
    {
        String tmp_string(*this);
        tmp_string += instance;
 
        result = tmp_string;
    }
    return result;
}
 
const String& String::operator+= (const String& instance)
{
    unsigned int new_size = size + instance.size;
    char* new_array = new char[new_size];
    
    for (unsigned int i = 0; i < size; ++i)
        new_array[i] = array[i];
 
    delete[]array;
    array = NULL;
    array = new_array;
    new_array = NULL;
   
    for (unsigned int i = 0; i < instance.size; ++i)
        array[i + size] = instance.array[i];
    array[new_size] = NULL;
 
    size = new_size;
    return *this;
}
 
bool String::operator== (const String& instance) const
{
    return strcmp(array, instance.array) == 0;
}
 
bool String::operator!= (const String& instance) const
{
    return strcmp(array, instance.array);
}
 
unsigned int String::length() const
{
    return size;
}
 
std::ostream& operator<< (std::ostream& stream, const String& instance)
{
    return stream << instance.array;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdlib>
#include <iostream>
 
#include "string.h"
 
int main()
{
    setlocale(LC_ALL, "Russian");
    
    String str("Привет");
    std::cout << (str + String(", мир!")) << std::endl;
    
    system("PAUSE");   
    return EXIT_SUCCESS;
}
вылетает в 12 строке - это конкатенация строк
то есть в main.cpp в операторе operator +. Конкретнее - при удалении объекта tmp_string в 60 строке
в деструкторе почему то вылетает после delete[]array;

среда VS 2010 Express

как-то не догоняю с чего бы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru