Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 161
#1

Как исправить ошибку - C++

11.08.2016, 11:47. Просмотров 366. Ответов 22
Метки нет (Все метки)

доброго времени суток.
вот у меня есть тут такой дефолт констрактор.
C++
1
2
3
4
5
MString::MString():length(8){
    this->data = new char[this->length];
    assert(data != 0);
    this->data = "UNKNOWN\0";
}
во время компиляции выдаеться вот такая вот ошибка. что не так написано???
заранее спасибо.
0
Миниатюры
Как исправить ошибку  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2016, 11:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как исправить ошибку (C++):

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

Как исправить ошибку? - C++
#include <conio.h> #include <math.h> #include <iostream> using namespace std; int fact(int a) {if (a==0) return 1; else return...

Как исправить ошибку? - C++
#include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <locale.h> #include <string.h> //Стуктура времени ...

Как исправить ошибку? - C++
D:\C++\az\main.cpp|6|error: expected unqualified-id before '{' token| ||=== Build finished: 1 errors, 0 warnings ===| Что это за...

Как исправить ошибку? - C++
Программирую в КБ. Выходит одна ошибка, понятия не имею как исправить. #include <stdio.h> #include <stdlib.h> #include <string.h> ...

Как исправить ошибку? - C++
#include <fstream.h> #include <string.h> #include <conio.h> #include <iomanip.h> #include <stdlib.h> #include <io.h> ...

22
Slip.
78 / 78 / 18
Регистрация: 17.03.2012
Сообщений: 488
Завершенные тесты: 1
11.08.2016, 11:57 #2
Скорее всего вы освобождаете память там, где она еще не занята.
Лучше присылать весь код.
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 161
11.08.2016, 12:00  [ТС] #3
Это Header программы

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 MSTRING_H
#define MSTRING_H
#define EOL '\0'
#define SPACE ' '
#include <assert.h>
 
class MString{
private:
    char* data;
    int length;
public:
    MString();
    MString(char* str);
    MString(int len);
    MString(const MString& obj);
    ~MString();
    char* getData();
    void setData();
    void strlen();
    void strlen(char* data);
    void operator + (const MString& obj);
    void operator - (const MString& obj);
    void operator == (const MString& obj);
    void operator != (const MString& obj);
    void operator >(const MString& obj);
    void operator <=(const MString& obj);
    void operator <(const MString& obj);
    void operator >=(const MString& obj);
    char operator [] (const MString& obj);
    void operator +=(const MString& obj);
};
#endif MSTRING H
это пока что написанный cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MString::MString():length(8){
    this->data = new char[this->length];
    assert(data != 0);
    this->data = "UNKNOWN\0";
}
 
MString::~MString(){
    delete[] data;
}
 
MString::MString(const MString& obj){
    this->length = obj.length;
    this->data = new char[length];
    assert(data != 0);
    for (int i = 0; i < this->length; i++)
        this->data[i] = obj.data[i];
}
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
11.08.2016, 12:02 #4
char? Чем string не угодил?
И тем более ты не можешь изменить char[] напрямую после того как задал.
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 161
11.08.2016, 12:03  [ТС] #5
Тем что я должен написать сам string.
почему так не [] потому что мне надо динамически выделять память.
0
Slip.
78 / 78 / 18
Регистрация: 17.03.2012
Сообщений: 488
Завершенные тесты: 1
11.08.2016, 12:04 #6
Цитата Сообщение от Chainik228 Посмотреть сообщение
char? Чем string не угодил?
У человека задание, видимо, определить свой строковый тип на основе char, с кучей операторов.
И да, перед тем, как делать очередной new, стоит, наверное, сделать и delete, чтоб не было утечки.
И не забудьте перед удалением проверить, существует ли указатель.

И еще вы не привели пример того, как вы используете ваш этот класс.
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
11.08.2016, 12:07 #7
Цитата Сообщение от Timama Посмотреть сообщение
this->data = "UNKNOWN\0";
Зачем вот эта строчка? И зачем в строковом литерале еще один терминальный ноль? Изза этого и проблема. Вы пытаетесь освободить память, которую Вы не выделяли.
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
11.08.2016, 12:09 #8
Цитата Сообщение от Timama Посмотреть сообщение
почему так не [] потому что мне надо динамически выделять память.
Поищите функцию malloc.
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 161
11.08.2016, 12:10  [ТС] #9
мне надо что бы def c'tor создал мне массив char в котором записано "UNKNOWN".

Добавлено через 56 секунд
это CPP не C
0
Chainik228
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 46
Завершенные тесты: 1
11.08.2016, 12:12 #10
Цитата Сообщение от Timama Посмотреть сообщение
это CPP не C
Никто не запрещает использовать cstdlib и взять оттуда malloc.
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
11.08.2016, 12:12 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В приведенном Вами литерале "UNKNOWN\0" 9 символов, так как присутсвует неявный ноль.
Инициализировать деволтную строку нужно вот так:
C++
1
strcpy( data, "UNKNOWN" );
1
pav1uxa
1846 / 1698 / 644
Регистрация: 23.01.2014
Сообщений: 6,078
Завершенные тесты: 1
11.08.2016, 12:18 #12
Цитата Сообщение от Timama Посмотреть сообщение
во время компиляции выдаеться
Наверное во время запуска приложения, а не компиляции? Там написано Runtime Error.
Цитата Сообщение от Timama Посмотреть сообщение
это пока что написанный cpp
Скопировал Ваш код, добавил функцию main() - он запускается, таких ошибок нет. Даже экземпляры класса создаются, через оба конструктора.

Видимо какой-то еще код есть?
0
Timama
10 / 10 / 5
Регистрация: 30.03.2016
Сообщений: 161
11.08.2016, 12:22  [ТС] #13
странно, может Visual Studio глючит.
и нет друг мой. мне не льзя и ими пользоваться. если надо копировать что либо, то надо функцию собственно ручно написать.
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
11.08.2016, 12:23 #14
Timama, тогда и пишите функцию побитового копирования строки. data = "UNKNOWN" работает не так, как Вы думаете. Поэтому приложение и падает.
0
Slip.
78 / 78 / 18
Регистрация: 17.03.2012
Сообщений: 488
Завершенные тесты: 1
11.08.2016, 12:23 #15
Цитата Сообщение от pav1uxa Посмотреть сообщение
Скопировал Ваш код, добавил функцию main() - он запускается, таких ошибок нет.
Я же писал выше, что пример использования этого класса не приведен.
Вполне возможно, что в мэйне что-то не так.
0
11.08.2016, 12:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2016, 12:23
Привет! Вот еще темы с ответами:

Как исправить ошибку? - C++
Ошибка 7 error LNK1120: 1 неразрешенных внешних элементов Ошибка 6 error LNK2019: ссылка на неразрешенный внешний символ _main в функции...

Как исправить ошибку - C++
Process exited with return value 3221225725 выскакивает после запуска программы, использую интовый массив. как снять это ограничение?

Как исправить ошибку? - C++
int f(int, int, int); void koorx(int, int, int, int); int nod(int, int); void koorx(int &amp;x, int &amp;y, int vx, int vy, int t = 1) { ...

Как исправить ошибку? - C++
Предупреждение 5 warning C4700: использована неинициализированная локальная переменная &quot;a&quot; 93строчка #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru