Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Физическая структура двух-мерных массивов


Автор: chipset 26.2.2006, 01:39
Цитата(Royan @  25.2.2006,  16:56 Найти цитируемый пост)
Daevaorn, Мне казалось, что в любом массиве элементы располагаются друг за другом. А можешь объяснить, в чем отличие динамического массива от статического с физической точки зрения, откуда там возникает утечка? 

В двухмерном массиве, созданом не динамически, члены массива идут один за другим. Пример:
Код

  char ch[2][2]={"c","a"};

Вот вырезка, как этот массив разместился у меня в памяти:
Цитата

0012FF7C  63 00 61 00

Теперь расмотрим динамический массив. В первую размерность записываются не данные, а адреса на вторую размерность. Во второй размерности уже записываются сами данные.
Пример:
Код

    char **ch=new char *[2];
    for (int i=0; i<2; i++) ch[i]=new char[2];
    ch[0][0]='c';
    ch[0][1]=0;
    ch[1][0]='a';
    ch[1][1]=0;

После выполнения в самой переменной ch был записан адрес на выделенную память.
Цитата

00322908  50 29 32 00 98 29 32 00

Это так выгледела первая размерность.
Так выгледит вторая размерность
Цитата

00322950  63 00
00322998  61 00

Если ты даеш memset для двухмерного динамического массива в твоем случае, то ты просто напросто затираеш ссылки на вторую размерность. И последуюшие попытки обрашения ко второй размерности должны привести к вылету программы.
 Добавлено @ Добавлено @ 18:48 
Если ты хочеш обнулять вторую размерность, нужно делать
Код

for(int i = 0; i < col - 1; i++) {
            memset(mx[i],0, sizeof(double)*row);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)