Динамичен масив от char* с malloc
12 отговора
415 прегледа
Динамичен масив от char* с malloc
Здравейте искам да алокирам динамичен масив от указатели към char
обаче имам само ANSI С не знам предварително размера
как да го направя ?
обаче имам само ANSI С не знам предварително размера
как да го направя ?
Re: Динамичен масив от char* с malloc
char **pepi ;
int size ;
pepi = (char **)(calloc(size, sizeof(char*))) ;
...
...
...
pepi[0] = "hello" ;
pepi[1] = "world" ;
//
free(pepi) ;
Re: Динамичен масив от char* с malloc
Ми той затова е динамичен, щото не знаеш размера. Като го разбереш алокираш така ( дано не ме лъже паметта, отдавна не съм писал на C ) :
char **arr = (char**)malloc(sizeof(char*)*N);
Ако имаш предвид, че може постоянно да добавяш стрингове в масива просто фиксирай N на някакво начално число и като го достигнеш го увеличаваш по някакъв начин ( стъпка, коефициент, таблица, ... ) и преалокираш. Разбира се това не се отнася за самите стрингове, а само за масива в който ги държиш.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
char **arr = (char**)malloc(sizeof(char*)*N);
Ако имаш предвид, че може постоянно да добавяш стрингове в масива просто фиксирай N на някакво начално число и като го достигнеш го увеличаваш по някакъв начин ( стъпка, коефициент, таблица, ... ) и преалокираш. Разбира се това не се отнася за самите стрингове, а само за масива в който ги държиш.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: Динамичен масив от char* с malloc
Между другото, има ли гаранция, че realloc ще работи винаги, когато има достатъчно памет?
Re: Динамичен масив от char* с malloc
Има гаранция че ще работи, но няма гаранция че няма да алокира нов блок. Демек ако в текущия блок не стига място ще алокира нов блок, ще копира стария в него и ще го освободи. Не съм много сигурен само дали ще копира стария блок в пълен размер, или пази някъде колко памет си заявил и ще копира само нея, но това е практически без голямо значение.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: Динамичен масив от char* с malloc
ако паметта е фрагментирана на парчета, по-малки от изискваното realloc може не успее, независимо че сумарно има достатъчно.
Re: Динамичен масив от char* с malloc
Е то тва си е ясно и важи за всички функции за алокация. Под "има достатъчно памет" аз разбирам да има достатъчно голям блок. Тва да не е като да викнеш сметосъбирача :-) Скоро не ми се е налагало да мисля за такива неща - виртуална памет дал Гейтс и светия Интел. Пък от половин година съм жабар и вече преодолявам културния шок от заети 800М от една програма :-)))))
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: Динамичен масив от char* с malloc
>>>800М от една програма<<<
...хлъц....
There are 10 types of people in this world one who understand binary jokes and one who not
...хлъц....
There are 10 types of people in this world one who understand binary jokes and one who not
Re: Динамичен масив от char* с malloc
I kato umnozish 800 po 3, adresnoto prostranstvo go njamaa.... Amsia?
Re: Динамичен масив от char* с malloc
Не знам що трябва да умножаваш по 3 - втора като нашата програма няма. Ама Out of virtual memory не е рядкост при нас. Сега ще правим някакви Object Pools за да не даваме на Жабата да тегли ресурс, че после с клизма не можеш да й го изкараш. Пробвали сме всякакви настройки за gc, викаме си dispose и т.н., ама не помага.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Re: Динамичен масив от char* с malloc
Posle ela mi razprawiaj pak tche java-ta e mnogo hubawo neshto


Кой бе, аз ли?!?
Немаш шансове да чуеш такова нещо от мен. Имаме си един самороден жабар ( т.е. на това само е писал ) и той дрънка такива глупости само, но ние сме трима C/C++ програмисти и като ни влезе в стаята баш като сме ядосани на жабата го правим луд :-) Той човекът не ни е виновен, ама като няма на кого да се скараш, че жабата е тъпа....
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_