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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.62
Гость63452
Сообщений: n/a
#1

Динамический массив символов - C++

13.10.2008, 20:41. Просмотров 4780. Ответов 15
Метки нет (Все метки)

Что я делаю не так?
вот код:

header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<string.h>
class m{public:
    m();~m();
    void set(char* _str);
    private:char *str[];
    };
void m::set( char* _str )
{
   int size=0;
   size=strlen(_str)+1;
   char *str=new char[size+1];
   strcpy( _str,str);
   std::cout<<str;
   delete [] str;};
   m::m(){};
   m::~m(){};
main.h:
C++
1
2
3
4
5
6
7
8
9
10
#include <cstdlib>
#include <iostream>
#include "header.h"
using namespace std;
int main()
{m *a= new m;
a->set("dd");
    system("PAUSE");
    return 0;delete a;
}
Компилятор не выдает ошибок. При запуске вылетает ошибка "Ошибка приложения" Инструкция по адресу "0х77с360fa"обратилась к памяти по адресу "0х00440000". Память не может быть ''written'.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2008, 20:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив символов (C++):

динамический массив символов.. - C++
Со слова яблоко путем &quot;вырезок&quot; и &quot;склейок&quot; его букв получить слова блок и глаз

Двумерный динамический массив символов - C++
Одномерный массив создаётся, но когда пытаюсь сделать двумерный, то ошибка. Заранее спасибо. #pragma argsused #include &lt;tchar.h&gt; ...

Динамический массив символов. Обработка строки - C++
Реализовать функцию,принимающую только один параметр - динамический массив-строку s и ничего не возвращающую. Функция должна меня строку s...

Обработка массивов символов. Динамический массив - C++
Дано предложение в виде статического массива, где слова разделены пробелом. Скопировать предложение в динамический массив и поменять...

Используя динамический массив выполнить перемещение всех цифровых символов в начало заданной строки - C++
Требуется помощь в написании следующей задачи -&gt; Ввести символьную строку. Выполнить перемещение всех цифровых сим-волов в начало...

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

15
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
13.10.2008, 20:58 #2
незнаю что там творится, но у мя тож бывает, что когда компилирую студией, то при создании объекта происходит ошибко.
но вот такая вещь
Код
return 0;delete a;
вообще-то, после return программа выходит, так что delete надо вызывать ДО return, все что после просто не будет выполнено.
и еще, делайте код отформатированым, а то не очень удобно
и используйте тег CODE
0
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.10.2008, 21:33 #3
Что это за прикол такой;
Код
private:char *str[B][][/B];
Воощето если стоит вот ЭТО [] то ЭТО надо инициализировать;

Это первая ошибка.

И вот ЭТО что за...
Код
strcpy( _str,str);
Вообщето _str и str местами поменяй.
Тут твоя ошибка.

И еще раз повторю слово "ВООЩЕ" как ты его откомпилил
У меня ВООЩЕ не компилиться твой код.
Но после коректировки работает.
0
Гость63452
Сообщений: n/a
13.10.2008, 21:35 #4
Извиняюсь за форматирование. У меня wxdev-cpp
никак не могу разобраться, а удаление на это не влияет.(все равно после завершения программы динамическая память очищается по умолчанию)
Гость63452
Сообщений: n/a
13.10.2008, 21:52 #5
Спасибо за ответ! Действительно все работает.
Может подскажете как сделать ввод строки с клавиатуры( а не параметром)
вот так не работает(я знаю что это неправильно):

header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<string.h>
class m{public:
    m();~m();
    void rus_str(char* _str);
    private:char *str[1];
    };
void m::rus_str( char* _str )
{  int size=0;
   std::cin>>_str;
   size=strlen(_str)+1;
   char *str=new char[size];
   strcpy( str,_str);
   std::cout<<str;
   delete [] str;};
   m::m(){};
   m::~m(){};
Ошибка приложения" Инструкция по адресу "0х0043d2cb"обратилась к памяти по адресу "0х00440000". Память не может быть ''written'.
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.10.2008, 22:23 #6
слушай, ты ислользуй тэг код не с такими <> скобками а вот с такими []

Ха прикол, а почему вот ЭТО ['B]['/B] не работает с вот ЭТИМ <>.

Типа вот так <>
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
13.10.2008, 22:38 #7
вот так не работает(я знаю что это неправильно)
Отвратительно! Кровавое месиво просто какое-то.. Убери всё, что связано с Си отсюда, иначе ты от ошибок никогда не избавишься. Смотри как смотрелся бы твой класс с применением string вместо char *:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//*.cpp - использование класса
#include "header.hpp"
 
using namespace std;
 
int main() {
 
string s = "ddd !!!";
m a (s);
cout << a << endl;
 
m b;
b.get_object();
cout << b << endl;
 
return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//header.hpp - реализация
#include <iostream>
#include <string>
 
class m {
  std::string S;
public:
  m(): S() {};
  m(std::string& _s): S(_s) {};
  ~m() {};
  void get_object() { std::cin >> S; }
  friend std::ostream& operator << (std::ostream& stream, m& M)
    { return stream << M.S; }
};
P.S. И вообще, по-видимому, ты рано за код ухватился. Бросай-ка ты это дело, бери хорошую книгу и садись внимательно читай!

P.P.S Кстати, кто подскажет, как friend убрать ? Я пробовал наследоваться от ostream, но тогда левоассоциированный оператор << не определён для потомка..
0
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.10.2008, 22:42 #8
Оййойой это не правильно, если ты используеш параметр как константный, то будет ошибка, хотя он у тебя не константный.
C++
1
std::cin>>_str;
Если я напишу вот так:
C++
1
2
3
4
5
6
7
8
int main()
{
    m *a= new m;
    a->rus_str("dd");      //используеться параметр как константный
    system("PAUSE");
    delete a;
    return 0;
}
То будет ошибка.

А вот так:
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    m *a= new m;
    char *str=new char[256];
    a->rus_str(str);                     //Параметр не константный
    system("PAUSE");
    delete a;
    delete str;
    return 0;
}
Все будет OK!!!
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
13.10.2008, 22:57 #9
Цитата Сообщение от Sined Посмотреть сообщение
Оййойой это не правильно, если ты используеш параметр как константный, то будет ошибка, хотя он у тебя не константный.
Ну добавь в класс ещё конструктор с параметром const string& .. Делов то..
0
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.10.2008, 23:04 #10
Цитата Сообщение от igor_nf Посмотреть сообщение
Ну добавь в класс ещё конструктор с параметром const string& .. Делов то..
Нет, тут вопрос о том, чтобы вводить значение с клавиатуры.

Ну добавил я, и что, таже фигня.
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
13.10.2008, 23:11 #11
Цитата Сообщение от Sined Посмотреть сообщение
Нет, тут вопрос о том, чтобы вводить значение с клавиатуры.

Ну добавил я, и что, таже фигня.
Что ты добавил ? Какая фигня ?

Вот определение класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
class m {
  std::string S;
public:
  m(): S() {};
  m(std::string& _s): S(_s) {};
  m(const std::string& _s): S(_s) {};
  void get_object() { std::cin >> S; }
  ~m() {};
 
  friend std::ostream& operator << (std::ostream& stream, m& M)
    { return stream << M.S; }
};
Покажи как ты его используешь ?
0
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.10.2008, 23:23 #12
Та такая разница как я его пишу, я говорю, что он не павильно описал эту функцию
C++
1
2
3
4
5
6
7
8
9
10
void m::rus_str( char* _str )
{
    int size=0;
    std::cin>>_str;             //вот ЗДЕСЬ ошибка
    size=strlen(_str)+1;
    char *str=new char[size];
    strcpy( str,_str);
    std::cout<<str;
    delete [] str;
}
А я могу и подругому описать.
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
13.10.2008, 23:34 #13
Цитата Сообщение от Sined Посмотреть сообщение
Та такая разница как я его пишу
Ну про его реализацию я молчу. Точнее, уже высказался.. Для автоматической инициализации в С++ придумали конструкторы. А к чему цирк с memcpy, *char[] и т. п. - для меня загадка..
0
Гость1010101
Сообщений: n/a
14.10.2008, 20:01 #14
К чему так все усложнять при такой задаче. Разве тут что-то не так?:

header.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
using namespace std;
class m {  
public:
  m() {};
  ~m() {};
  void get_object() { std::cin >> name;}
  void set(){std::cout<<name;}
     private: string name;
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "header.hpp"
using namespace std;
int main() 
{m b;
b.get_object();
b.set();
system("PAUSE");
return 0;
}
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
15.10.2008, 14:13 #15
Ага, асобенно вот это
Цитата Сообщение от Гость1010101 Посмотреть сообщение
header.hpp
0
15.10.2008, 14:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2008, 14:13
Привет! Вот еще темы с ответами:

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Заполнить динамический массив из файла и записать массив обратно в файл - C++
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из файла и обратную которая этот массив запишет в файл=)

динамический массив (Целое число разложить на массив простых множителей) - C++
Доброго времени суток всем. Целое число необходимо разложить на массив простых множителей. Столкнулся с проблемой, мне нужно, чтобы...


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

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

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