2013-10-25 3 views
0

Мне нужно реализовать 10 колоний динамическим массивом длины строки, который может содержать строку. До сих пор я пытаюсь поэкспериментировать, используя intiger вместо srings, для простоты.Динамическое распределение 2D-массив

это мой код до сих пор:

int** pArray = (int**)malloc(10*sizeof(int*)); 
for (i = 0; i < 10; i++) 
{ 
    pArray[i] = (int*)malloc(sizeof(int)); 
} 

так что теперь я знаю, что я создал массив 10x1. теперь мне нужно динамически выполнять каждую строку в соответствии с необходимостью, которая возникает.

в этот момент я застрял. Любая помощь будет очень полезна

+0

Если бы это было мне, я бы не выделить строки, пока я не знал, сколько. Просто установите указатель на NULL, и когда вы перейдете к нему, и он будет NULL, выделите пробел. –

+1

[Также не выдавайте результат malloc.] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – pzaenger

+0

Для матриц выделяют один вектор и вычисляют комплексный индекс (например: 'col * rows + row') является более эффективным. Я никогда не сделаю этого по твоему пути. (Какова цена распределения? Какова цена контекста памяти изменений (перезагрузка данных в кеш)? И т. Д.) – Naszta

ответ

1

Лучшим подходом, чем перераспределение, было бы выделение строк после того, как вы узнаете, сколько памяти потребуется.

char ** pArray = (char **)malloc(10*sizeof(char*)); 
for(i=0;i<10;i++) 
{ 
    pArray[i] = NULL; 
} 

И когда вам нужно выделить строку «я» размера «п», сделать

pArray[i] = (char*)malloc(n*sizeof(char)); 
+0

Практически я реализую алгоритм хеширования, и если произойдет конфликт, я буду хранить в той же строке, но другой coloumn, thats my idea. я не знаю, правильно ли он подходит – eromlig

Смежные вопросы