Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Исправить ошибку

30.11.2021, 15:18. Показов 1588. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу сделать простой класс присвоения строки. Т.е. При инициализации выделяется память и переносится в эту память массив строки.
При присвоении другой строки всё работает, но возникает ошибка памяти. Подскажите пожалуйста как исправить.
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
#include <iostream>
using namespace std;
 
typedef bool LOGIC;                     // 0..1
typedef char LETTER;                    // буква
typedef __INT8_TYPE__ RANGE;        // -128..127
typedef __UINT8_TYPE__ BYTE;        // 0..255
typedef __INT16_TYPE__ INT_S;       // -32768..32767
typedef __UINT16_TYPE__ INT_W;  // 0..65535
typedef __INT32_TYPE__ INT_M;       // -2147483648..2147483647
typedef __UINT32_TYPE__ INT_L;  // 0..4294967295
typedef __INT64_TYPE__ INT_T;       // -9223372036854775808..9223372036854775807
typedef __UINT64_TYPE__ INT_B;  // 0..18446744073709551615
typedef float FLOAT;                        // 1.8E-38..1.8E+38     32b
typedef double DOUBLE;              // 2.2E-308..1.8E+308   64b
//typedef char* STRING;                 // строка
typedef void* POINTER;              // указатель
 
INT_B Size(const char str[]){
    INT_B sz=0;
    while(str[sz]!='\0')sz++;
    return sz;
}
 
template <typename dTYPE>
void Pshift(dTYPE* &pnt,INT_L shift=1){
    shift=shift*sizeof(dTYPE);
    pnt=(dTYPE*)((INT_B)pnt+shift);
}
POINTER Pshift(POINTER pnt,INT_L shift=1){
    return (POINTER*)((INT_B)pnt+shift);
}
 
void Mcopy(POINTER adr1,POINTER adr2,INT_L size){
    INT_L ct;
    ct=size/8;
    if(ct>0){size=size%8;
        do{ct--;
            *(INT_B*)adr1=*(INT_B*)adr2;
            adr1=Pshift(adr1,8);adr2=Pshift(adr2,8);
        }while(ct>0);
    }
    ct=size/4;
    if(ct>0){size=size%4;
        do{ct--;
            *(INT_L*)adr1=*(INT_L*)adr2;
            adr1=Pshift(adr1,4);adr2=Pshift(adr2,4);
        }while(ct>0);
    }
    ct=size/2;
    if(ct>0){size=size%2;
        do{ct--;
            *(INT_W*)adr1=*(INT_W*)adr2;
            adr1=Pshift(adr1,2);adr2=Pshift(adr2,2);
        }while(ct>0);
    }
    if(size>0){ct=size;
        do{ct--;
            *(BYTE*)adr1=*(BYTE*)adr2;
            adr1=Pshift(adr1,1);adr2=Pshift(adr2,1);
        }while(ct>0);
    }
}
 
class STRING {
private:
    INT_L sz=0;
    LETTER* str=NULL;
public:
    STRING(const LETTER ltr[]){
        this->sz=::Size(ltr);sz++;
        this->str=new LETTER[sz];
        Mcopy(this->str,(POINTER)ltr,sz);
    }
    ~STRING(){
        if(this->str)delete this->str;
    }
    INT_L Size(){return this->sz;}
    /*STRING & operator=(const STRING &obj) {
        //obj.~STRING();
        return *this;
    }*/
    friend std::ostream& operator<< (std::ostream &out, const STRING &obj){
        out << obj.str;return out;
    }
};
 
int main() {
    setlocale(LC_ALL,"");
    STRING tx="проверка строки";
    cout << tx << " = " << tx.Size() << endl;
    tx="12345";// после этого возникает ошибка
    cout << tx << " = " << tx.Size() << endl;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2021, 15:18
Ответы с готовыми решениями:

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...

Выводит ошибку MBS6006 "CL.exe" exited with code 2. Как исправить эту ошибку?
Иногда возникает эта ошибка и не понимаю, мол откуда она. Погуглил - ничего дельного. Подскажите, как это решить. В онлайн компиляторе все...

Выводит ошибку MBS6006 "CL.exe" exited with code 2. Как исправить эту ошибку?
#pragma once #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;cmath&quot; #include &lt;string&gt; #include &quot;windows.h&quot; #define PI 3.14 ...

24
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.11.2021, 22:20  [ТС]
Студворк — интернет-сервис помощи студентам
Разобрался. Спасибо всем.
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
class STRING {
private:
    INT_L sz=0;
    LETTER* str=NULL;
    void Create(const char ltr[]){
        this->sz=::Size(ltr);sz++;
        this->str=new LETTER[sz];
        Mcopy(this->str,(POINTER)ltr,sz);
    }
public:
    STRING(const char ltr[]){
        this->Create(ltr);
    }
    ~STRING(){
        delete []this->str;
    }
    STRING & operator=(const char ltr[]){
        this->~STRING();this->Create(ltr);return *this;
    }
    INT_L Size() const {return this->sz;}
    
    friend std::ostream& operator<< (std::ostream &out, const STRING &obj){
        out << obj.str; return out;
    }
};
 
 
int main() {
    setlocale(LC_ALL,"");
    STRING tx="проверка строки";
    cout << tx << " = " << tx.Size() << endl;
    tx="12345";
    cout << tx << " = " << tx.Size() << endl;
}
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
30.11.2021, 22:25
Цитата Сообщение от pgb Посмотреть сообщение
C++
1
this->~STRING()
Как я уже сказал, так делать нельзя. Деструктор явно вызывать можно только в ограниченном числе случаев, но ваш случай к ним не относится.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
30.11.2021, 22:31
Цитата Сообщение от pgb Посмотреть сообщение
Разобрался. Спасибо всем.
Чушь полнейшая. Зачем было все это делать, если все равно класс является неработоспособным из-за некорректной реализации копирующих методов? А если если бы копирующих методы были реализованы корректно, то тогда ничего из уже написанного не понадобилось бы.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.11.2021, 22:33
Цитата Сообщение от pgb Посмотреть сообщение
Разобрался. Спасибо всем.
До первой попытки возврата такого STRING из функции.
Или приравнивания одного объекта STRING к другому.

Вообщем, "Продавали — веселились, посчитали — прослезились!".
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
01.12.2021, 17:37  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Давайте раз и навсегда решим - вы хотите чему-то научиться и решить проблему, или вы хотите быть правым?
Если все-таки первое, то вот вам объяснение поведения:
Да, спасибо я в принципе сам до этого дошёл, ваше подробное пояснение подтвердило мою догадку.

Я реализовал класс строки как и хотел. Ещё раз спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2021, 17:37

Исправить ошибку
Что это за ошибка, необъявленные индентификаторы и то, что они не определены. #include &lt;stdio.h&gt; #include &lt;cmath&gt; ...

Исправить ошибку
Здравствуйте, есть программа (на С++) для численного расчета системы от 0 до 157 ч., считает верно. Переделываю данную программу т.о.,...

Исправить ошибку
Нужно исправить ошибку func not declared in this scope. Короче, нужно, чтобы данные из функции fun переходили в ф-цию main #include...

Исправить ошибку
Не компилится. Надо найти ошибку и поправить. #include &lt;stdio.h&gt; #include &lt;math.h&gt; #define E return #define S for ...

Исправить ошибку
Здравствуйте, не могу исправить ошибку: &quot;no matching function for call to `pow(int)'&quot; Строку с ошибкой пометил в коде. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru