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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
#1

Динамический char* - C++

08.02.2010, 14:18. Просмотров 1107. Ответов 5
Метки нет (Все метки)

В чем проблема утечки памяти?как сделать тут лучше и почему не выводит на экран слова?
как правильно перегрузить?
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
class item
{
    int number;// номер детали
    char *name;// название
public:
    item();
    item(const item&);
    item(int numb,char *n);
    void see(void);
    ~item(){delete [] name;};
//  friend ostream & operator <<(ostream & out,const item& T)
//  {
//      return out<<T.name;
//  }
};
 
void item::see(void)
{
    std::cout<<*name;
    std::cout<<number;
}
item::item()
{
//
}
item::item(int numb,char *n)
{
    number=numb;
    name=new char[100];
    n=new char[strlen(n)+1];
    strcpy(name,n);
}
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    item it(10,"gaika");
    it.see();
    _getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2010, 14:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический char* (C++):

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

Динамический массив из char - C++
Скриншот с ошибкой int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); char * alphabet; int index =...

Динамический двумерный массив char через new? - C++
В общем, нужно создать n-ое количество двухсимвольных строк char. Как правильно выделить память под него, используя new? Просто, следуя...

двумерный динамический массив типа char - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; using namespace std; void RussianMessage(const char *str) { ...

Трехмерный динамический массив типа char - C++
Здравствуйте! Я хочу создать двухмерную матрицу, каждым элементом которой должна являться символьная строка длиной 20. По сути получается...

Создать класс с 1 полем: динамический массив char - C++
Необходимо создать класс с 1 полем: динамический массив char. С конструктором, куда передавать динамический массив char. В main создать...

5
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
08.02.2010, 14:31 #2
Зачем два оператора new.

Добавлено через 5 минут
std::cout<<*name; //зачем применять разадресацию к первому элементу строки
//По пробуй так:
std::cout<<name;
1
Evg
Эксперт CАвтор FAQ
18379 / 6427 / 441
Регистрация: 30.03.2009
Сообщений: 17,840
Записей в блоге: 28
08.02.2010, 14:32 #3
В 30-й строке ты в переменную n, которая является парамтром функции записал результат new, и "потерял" значение параметра. В 31 строке делается неинициализированное копирование
1
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
08.02.2010, 14:36 #4
Поправка конструктора:
item::item(int numb,char *n)
{
number=numb;
name=new char[strlen(n)+1];
strcpy(name,n);
}

Добавлено через 2 минуты
Да Evg: зачем выделять память и записывать адрес памяти в параметр, конструктора.
Такого я ещё не видел.
1
Evg
Эксперт CАвтор FAQ
18379 / 6427 / 441
Регистрация: 30.03.2009
Сообщений: 17,840
Записей в блоге: 28
08.02.2010, 14:40 #5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Да Evg: зачем выделять память и записывать адрес памяти в параметр, конструктора.
Такого я ещё не видел.
Я подозреваю, что имелось в виду, что 29-ю строку надо удалить, а в 30-й строке вместо "n=" должно быть написано "name="

Добавлено через 1 минуту
Не выводит на экран в том числе и поэтому (потому что в name скопировались неинициализированные значения)
2
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
08.02.2010, 14:42 #6
Да Evg ты прав:
item it(10,"gaika"); //после вызова указатель получает адрес нового буфера(динамического) и
следовательно строка gaika не копируется в массив name
1
08.02.2010, 14:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2010, 14:42
Привет! Вот еще темы с ответами:

Как переделать динамический массив int в char? - C++
Как переделать динамический массив int в char? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdio&gt; #include &lt;iomanip&gt; ...

Посмотрите объявление вектора и попытайтесь создать динамический массив, содержащий элементы типа char - C++
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; DynArrNums (3); DynArrNums = 365; ...

Как прочесть несколько слов из файла в динамический массив char и добавить новое значение в конец? - C++
Никак не могу разобраться. Есть текстовый файл в виде: 3 Mop floor Clean windows Mow lawn цифра 3 это количесво...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...


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

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

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