Динамичен масив от char* с malloc

12 отговора 415 прегледа
#1

Динамичен масив от char* с malloc

Здравейте искам да алокирам динамичен масив от указатели към char
обаче имам само ANSI С не знам предварително размера
как да го направя ?

Отговор
в отговор на Глyпи #2

Re: Динамичен масив от char* с malloc


char **pepi ;
int size ;
pepi = (char **)(calloc(size, sizeof(char*))) ;
...
...
...
pepi[0] = "hello" ;
pepi[1] = "world" ;
//

free(pepi) ;


Отговор
в отговор на Глyпи #3

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?_
Отговор
в отговор на Colombino #4

Re: Динамичен масив от char* с malloc

Между другото, има ли гаранция, че realloc ще работи винаги, когато има достатъчно памет?

Отговор
в отговор на Resurrector #5

Re: Динамичен масив от char* с malloc

Има гаранция че ще работи, но няма гаранция че няма да алокира нов блок. Демек ако в текущия блок не стига място ще алокира нов блок, ще копира стария в него и ще го освободи. Не съм много сигурен само дали ще копира стария блок в пълен размер, или пази някъде колко памет си заявил и ще копира само нея, но това е практически без голямо значение.


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на Resurrector #6

Re: Динамичен масив от char* с malloc

ако паметта е фрагментирана на парчета, по-малки от изискваното realloc може не успее, независимо че сумарно има достатъчно.

Отговор
в отговор на He #7

Re: Динамичен масив от char* с malloc

Е то тва си е ясно и важи за всички функции за алокация. Под "има достатъчно памет" аз разбирам да има достатъчно голям блок. Тва да не е като да викнеш сметосъбирача :-) Скоро не ми се е налагало да мисля за такива неща - виртуална памет дал Гейтс и светия Интел. Пък от половин година съм жабар и вече преодолявам културния шок от заети 800М от една програма :-)))))


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на Colombino #8

Re: Динамичен масив от char* с malloc

:)

Отговор
в отговор на Colombino #9

Re: Динамичен масив от char* с malloc

>>>800М от една програма<<<

...хлъц....

There are 10 types of people in this world one who understand binary jokes and one who not
Отговор
в отговор на Colombino #10

Re: Динамичен масив от char* с malloc

I kato umnozish 800 po 3, adresnoto prostranstvo go njamaa.... Amsia?

Отговор
в отговор на Uf #11

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?_
Отговор
в отговор на Colombino #12

Re: Динамичен масив от char* с malloc

Posle ela mi razprawiaj pak tche java-ta e mnogo hubawo neshto

Отговор
в отговор на Jeh #13

Кой бе, аз ли?!?

Немаш шансове да чуеш такова нещо от мен. Имаме си един самороден жабар ( т.е. на това само е писал ) и той дрънка такива глупости само, но ние сме трима C/C++ програмисти и като ни влезе в стаята баш като сме ядосани на жабата го правим луд :-) Той човекът не ни е виновен, ама като няма на кого да се скараш, че жабата е тъпа....


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор