Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Физическая структура двух-мерных массивов 
:(
    Опции темы
chipset
Дата 26.2.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 164



Цитата(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);
}



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.