Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:01
Оценка:
Privet.
Kak pravilino videliti pamiati dlea mnogomernogo massiva odnim vizovom malloc?
Naprimer: 2-mernii massiv 3 x 5
U menia polucilosi toliko takim sposobom:
int **m;
m=malloc(sizeof(int)*3);
for (i=0;i<5;i++) m[i]=malloc(sizeof(int)*5);
Esti li bolee effectivinii sposob?
m=malloc(sizeof(int (*) [5])*); // ne rabotaet
m=malloc(sizeof(int)*15); // toje ne pravilino
Spasibo.
Serg
Re: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:07
Оценка:
А>m=malloc(sizeof(int (*) [5])*); // ne rabotaet
Propustil 3:
m=malloc(sizeof(int (*) [5]) * 3);
Re: Videlenie pamiati dlea mnogomernogo massiva
От:
kly
Дата: 03.06.03 09:07
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Privet.
А>Kak pravilino videliti pamiati dlea mnogomernogo massiva odnim vizovom malloc?
А>Naprimer: 2-mernii massiv 3 x 5
А>U menia polucilosi toliko takim sposobom:
А>int **m;
А>m=malloc(sizeof(int)*3);
А>for (i=0;i<5;i++) m[i]=malloc(sizeof(int)*5);
А>Esti li bolee effectivinii sposob?
А>m=malloc(sizeof(int (*) [5])*); // ne rabotaet
А>m=malloc(sizeof(int)*15); // toje ne pravilino
А>Spasibo.
А>Serg
А почему, последнее не-правильно?
Открою секрет int A[3][5], тоже хранится в виде линейного массива из 15 элементов. Просто индексироваться надо правильно!
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, — недооценка изобретательности клинических идиотов.
http://www.inconteam.com
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:13
Оценка:
kly>А почему, последнее не-правильно? Открою секрет int A[3][5], тоже хранится в виде линейного массива из 15 элементов. Просто индексироваться надо правильно!
V poslednem slucae nevozmojno obrasenie k elementam massiva tima m[1][2].
T.e.
m=malloc(sizeof(int)*15); <- sozdaet odnomernii massiv iz 15 pointer-ov k odnomernomu massivu int.
Esli ispolizovati odnomernii masssiv obrasatisea k elementam nado budet cerez m[i*elements_in_row + j], mne je nado obrasenie m[i][j].
Re: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 09:14
Оценка:
Здравствуйте, Аноним, Вы писали:
2 выделения:
int main()
{
int nRows = 3, nColumns = 5;
int * pData = new int [nRows*nColumns];
int ** p2d_arr = new int * [nRows];
for (int i = 0; i < nRows; ++i)
p2d_arr[i] = pData + i*nColumns;
p2d_arr[0][0] = 0;
//...
p2d_arr[2][4] = 0;
delete [] p2d_arr;
delete [] pData;
return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:19
Оценка:
Bell,
Zabil skazati — pishu na C.
C++ ne podhodit.
No esli suditi po otvetu, moi pervii sposob edinstvennii. Odnim vizovom malloc ne polucitisea.
Spasibo.
Re: Videlenie pamiati dlea mnogomernogo massiva
int ** m = (int **) malloc(sizeof (int )*3*5);
...
free(m);
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:29
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:
Spasibo!
Vsio genialinoe — prosto.
Serg
АШ>АШ>int ** m = (int **) malloc(sizeof (int )*3*5);
АШ>...
АШ>free(m);
АШ>
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 09:29
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:
АШ>АШ>int ** m = (int **) malloc(sizeof (int )*3*5);
АШ>...
АШ>free(m);
АШ>
Остальсь только написать
m[2][4] = 123;
и радоваться результатам
Любите книгу — источник знаний (с) М.Горький
Re[3]: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 09:29
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Анатолий Широков, Вы писали:
А>Spasibo!
А>Vsio genialinoe — prosto.
А>Serg
Поробуй сначала
Любите книгу — источник знаний (с) М.Горький
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:36
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:
Anatolii,
Odnako code ne rabotaet — vidaet oshibku "memory couldn't be "written" pro popitke prisvoti znacenia elementam m[i][j]....
V cem problema?
АШ>АШ>int ** m = (int **) malloc(sizeof (int )*3*5);
АШ>...
АШ>free(m);
АШ>
Re[2]: Videlenie pamiati dlea mnogomernogo massiva
прогнал я, братцы.
Re[4]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:38
Оценка:
B>Поробуй сначала
Pospeshil radovatisea, ti prav
Re[5]: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 09:43
Оценка:
Здравствуйте, Аноним, Вы писали:
B>>Поробуй сначала
А>Pospeshil radovatisea, ti prav
Если первая размерность известна на этапе компиляции, то можно так:
int main()
{
const int nRows = 3;
int nColumns = 5;
int* pData = (int*)malloc(sizeof(int)*nRows*nColumns);
int (*p2d_arr)[nRows] = (int (*)[nRows])&pData;
p2d_arr[0][0] = 0;
p2d_arr[2][4] = 0;
free(pData);
return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[6]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 09:49
Оценка:
K sojeleniu razmernosti ne izvestna. No code interesnii — ne vstrecal takoi initializatsii -> int (*p2d_arr)[nRows] = (int (*)[nRows])&pData;
B>int main()
B>{
B> const int nRows = 3;
B> int nColumns = 5;
B> int* pData = (int*)malloc(sizeof(int)*nRows*nColumns);
B>
B> p2d_arr[0][0] = 0;
B> p2d_arr[2][4] = 0;
B> free(pData);
B> return 0;
B>}
Re[7]: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 10:02
Оценка:
Здравствуйте, Аноним, Вы писали:
А>K sojeleniu razmernosti ne izvestna. No code interesnii — ne vstrecal takoi initializatsii -> int (*p2d_arr)[nRows] = (int (*)[nRows])&pData;
Забудь — это все неправильно
Любите книгу — источник знаний (с) М.Горький
Re[7]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 10:11
Оценка:
Аноним
тем не менее, если жестко требуется, чтобы массив занимал непрерывную область
в памяти, то можно поступить так:
int x=3, y=5;
/*------------ создание ------------------*/
int**array=(int**)malloc(sizeof(int*) * y);
array[0]=(int*)malloc(sizeof(int) * x * y);
for(int i=1; i<y; ++i){
array[i]=array[i-1]+x;
}
...
array[i][j]=k;
...
/*------------ удаление ------------------*/
free(array[0]);
free(array);
Re[8]: Videlenie pamiati dlea mnogomernogo massiva
От:
Аноним
Дата: 03.06.03 10:18
Оценка:
Ne forum, a iumorina.
B>Забудь — это все неправильно
Re[8]: Videlenie pamiati dlea mnogomernogo massiva
От:
Bell
Дата: 03.06.03 10:26
Оценка:
Здравствуйте, Аноним, Вы писали:
Да, этот вариант я уже предлагал. А всякие танцы с одним блоком возможны, когда
все размерности известны, и при этом создавать массив на стэке по каким-то причинам нельзя.
int main()
{
const int nRows = 3, nColumns = 5;
int * pData = (int *)malloc(sizeof (int )*nRows*nColumns);
int (&p2d_arr)[nRows][nColumns] = (((int (&)[nRows][nColumns])pData));
p2d_arr[0][0] = 0;
p2d_arr[2][4] = 0;
for (int i = 0; i < nRows; ++i)
for (int j = 0; j < nColumns; ++j)
cerr << (&p2d_arr[i][j]) << endl;
free(pData);
return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[3]: Videlenie pamiati dlea mnogomernogo massiva
От:
mp63k6
Дата: 03.06.03 10:30
Оценка:
Здравствуйте, Bell, Вы писали:
B>Остальсь только написать
B>B>m[2][4] = 123;
B>
B>и радоваться результатам
почему тогда не m[4][2] = 123;
гон всё это
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить