Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 13:06   #1
Эйнж
 
Аватар для Эйнж
 
Регистрация: 02.08.2008
Сообщений: 9
По умолчанию Переменный размер массива

Одномерный массив, размер которого в процессе программы увеличивается(возрастает на 1 за раз, и новому члену тут же присваивается значение). Как такое реализовать ?
Эйнж вне форума Ответить с цитированием
Старый 27.03.2009, 13:10   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Использовать функцию calloc()
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 27.03.2009, 13:22   #3
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

int *massiv = (int*)malloc(sizeof(int)*n); // n - число элементов (создание)
int *massiv = (int*)realloc(massiv, sizeof(int)*n); // n - число элементов (изменение размера)
free(massiv); // очищение памяти, выделенной под массив
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 27.03.2009 в 15:10.
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 13:28   #4
Эйнж
 
Аватар для Эйнж
 
Регистрация: 02.08.2008
Сообщений: 9
Смех

Епт, гениально! ) Я этих функций просто не знал. Спасибо =)
Эйнж вне форума Ответить с цитированием
Старый 27.03.2009, 14:57   #5
Эйнж
 
Аватар для Эйнж
 
Регистрация: 02.08.2008
Сообщений: 9
По умолчанию

Ещё вопрос:
Вообще, мне необходимо сделать массив строк. И иметь возможность редактировать отдельные символы в этом массиве + массив должен быть переменным, чтобы в процессе изменять свой размер.
Я последовал вашему совету:

char **massiv = (char**)calloc (5,sizeof(char*));
*(massiv + 2) = "String 3";// инициализирую 3-ю строку
printf("\n%s",*(massiv + 2)); // работает, выводит "String 3"

А вот получить доступ к отдельному символу строки не получается ... как это сделать?
Эйнж вне форума Ответить с цитированием
Старый 27.03.2009, 15:03   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

massiv[2][3] - 4-й символ 3-й строки
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 15:03   #7
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

будь проще) незачем прописывать эти ужасные смещения...

Код:
	char **massiv = (char**)calloc(5, sizeof(char*));
	massiv[1] = "LOL";
	cout << massiv[1] << endl;
	cout << massiv[1][1] << endl;
	free(massiv);
и приучи себя ВСЕГДА освобождать выделенную память)
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 15:05   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

И вообще, если пишите на С++, то используйте какой-нибудь std::vector в качестве динамического массива и std::string в качестве строк и не заморачивайтесь с выделением памяти
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 15:07   #9
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

все-таки такие вещи надо знать.
нынче многие начинают учить сразу плюсы без чистых Сей...
в итоге получаются полуфабрикаты..
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 15:15   #10
Эйнж
 
Аватар для Эйнж
 
Регистрация: 02.08.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от wyvern Посмотреть сообщение
Я не могу всё равно изменить отдельновзятый символ

char **massiv = (char**)calloc(5, sizeof(char*));
massiv[1] = "LOL"; // Ок
massiv[1][2] = 'X'; // при проверке ошибку не находит, ошибка вылазит при дэбаге
free(massiv);


Unhandled exception at 0x004133e0 in qwerty2.exe: 0xC0000005: Access violation writing location 0x004156aa.
Эйнж вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напомните как задать размер динамического массива Arassir Помощь студентам 4 08.03.2009 13:02
размер массива nosuchathing Общие вопросы C/C++ 6 15.01.2009 11:40
максимальный размер массива в 32-битной оси Adamant Свободное общение 5 03.12.2008 21:14
Размер массива в Delphi simple_Pro Помощь студентам 2 11.05.2008 09:15
Как узнать размер массива мандарин Общие вопросы Delphi 2 30.05.2007 19:18