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

Массив строк, выделение памяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.05.2010, 17:31     Массив строк, выделение памяти #1
Здравствуйте!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <CONIO.H>
#include <IOSTREAM.H>
 
void main()
{
char *val[32];      int n;
cout<<"n?"; cin>>n;
val=new char*[n];
for (int i=0;i<n;i++)
val[i]=new char[32];
for (int i=0;i<n;i++)
 {cout<<"Input: ";
 cin.get(); cin.getline(val[i],32); }
 for (int i=0;i<n;i++)
 cout<<val[i][32];
getch();
}
Как правильно память под это выделить?
выводит какбе не то что надо и я думаю это потому что я память неправильно выделяю
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 17:35     Массив строк, выделение памяти #2
char *val[32]; //поменяй на char**val;

Добавлено через 17 секунд
Память освободить не забудь.
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.05.2010, 17:38  [ТС]     Массив строк, выделение памяти #3
а всеравно тогда, при выводе пишет не то что вводили
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 18:01     Массив строк, выделение памяти #4
Это не вывод:
C++
1
2
for (int i=0;i<n;i++)
 cout<<val[i][32];
Вот тебе вывод:
C++
1
2
3
4
5
for (int i=0;i<n;i++){
   for(int j = 0 ; J <32; j++)  cout<<val[i][j];
   cout<<'\n';
}
cout<<'\n';
Добавлено через 1 минуту
А можно еще проще:
C++
1
2
for (int i=0;i<n;i++) cout<<val[i]<<'\n';
cout<<'\n';
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.05.2010, 18:08  [ТС]     Массив строк, выделение памяти #5
Спасибо! а вот под char *val[32]; это как память выделить правильно?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 18:11     Массив строк, выделение памяти #6
char *val[32] ;
Здесь у тебя известно что будет 32 строки, поэтому тебе память нужно выделять
только под строки.
C++
1
for (int i=0;i<32;i++)val[i]=new char[Размер строки];
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
12.05.2010, 18:16     Массив строк, выделение памяти #7
необходимо просто сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <CONIO.H>
#include <IOSTREAM.H>
 
void main()
{
int n;
cout<<"n?"; 
cin>>n;
char **val=new char *[n];
for (int i=0;i<n;i++)
val[i]=new char[32];
for (int i=0;i<n;i++)
 {
     cout<<"Input: ";
 cin.get(); cin.getline(val[i][32]);
}
 for (int i=0;i<n;i++)
 cout<<val[i][32];
 
delete [] val;
}
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 18:24     Массив строк, выделение памяти #8
Crudelis:
Утечка памяти ты освободил память только из под указателей на строки, а сами строки остались.

Надо было так:
C++
1
2
for( int i = 0 ; i < n ; i++)delete[]val[i];
delete[]val;
Из - за одной ошибочной книжки я то же думал как ты,
но хорошо есть диспетчер задач и все проверяется,
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.05.2010, 18:25  [ТС]     Массив строк, выделение памяти #9
ну с этим разобрался)
а вот почему здесь он вводит не как надо7
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
void write_value(int m, char* val[32], char* key[32])
{
 
for (int i=0;i<n;i++)
{ key[i]=new char[32];
  val[i]=new char[32]; }
cin.get();
for (int i=0;i<m;i++)
 { cin.getline(key[i],32);
   cin.getline(val[i],32); }
}
void out_value(int m, char* val[32], char* key[32])
{
for (int i=0;i<m;i++)
 { cout<<"{"<<key[i]<<", "<<val[i]<<"}";
   cout<<endl; }
}
void main( )
{
int k,n,m;
char* val[32], key;
cout<<rus("Г‡Г*ïîëГ*ГҐГ*ГЁГҐ ñâîéñòâ ïîóìîë÷Г*Г*ГЁГѕ")<<endl;
cout<<rus("Ïðèìåð: {Name, txtBook}")<<endl<<endl;
write_value (m,val,key);
out_value (m,val,key);
getch();
}
Crudelis
Шаровик затейник
 Аватар для Crudelis
668 / 410 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
12.05.2010, 18:30     Массив строк, выделение памяти #10
Genius Ignat, точно, спасибо что заметил я просто забыл удалить строки
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.05.2010, 20:35  [ТС]     Массив строк, выделение памяти #11
а и еще при вызове функций в маине:
C++
1
2
write_value (m,val,key);
out_value (m,val,key);
пишет:
[C++ Error] Unit1.cpp(41): E2034 Cannot convert 'char *' to 'char * *'
[C++ Error] Unit1.cpp(41): E2342 Type mismatch in parameter 'key' (wanted 'char * *', got 'char *')

Добавлено через 1 час 39 минут
а ошибка была в этом:
C++
1
char* val[32], key;
а надо было:
C++
1
char* val[32]; char* key[32];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2010, 20:41     Массив строк, выделение памяти
Еще ссылки по теме:

C++ Выделение памяти под массив структур
C++ Выделение памяти под статический массив
C++ Динамическое выделение памяти под массив

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

Или воспользуйтесь поиском по форуму:
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 20:41     Массив строк, выделение памяти #12
Маладца сам разобрался.
Yandex
Объявления
12.05.2010, 20:41     Массив строк, выделение памяти
Ответ Создать тему
Опции темы

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