<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Выделение памяти под двумерный массив</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9162.html</link>
    <description>Доброго времени суток &lt;br&gt;помогите разобраться..запутался-выделение памяти под двумерный массив &lt;br&gt;              &lt;br&gt;  int **array1 = (int **)malloc(nrows * sizeof(int *));&lt;br&gt;        for(i = 0; i &amp;lt; nrows; i++)&lt;br&gt;        array1&#091;i&#093; = (int *)malloc(ncolumns * sizeof(int));&lt;br&gt;&lt;br&gt;не могу понять почему мы вначале выделяем память под строки , а потом под столбцы &lt;br&gt;т.е &lt;br&gt;&lt;br&gt;&#092;&#092;пускай будет char для наглядности&lt;br&gt;              &lt;br&gt;  char **array1 = (char **)malloc(5 * sizeof(char*));&lt;br&gt;        for(i = 0; i &amp;lt; 5; i++)&lt;br&gt;        array1&#091;i&#093; = (char *)malloc(3 * sizeof(char));&lt;br&gt;&lt;br&gt;получается , что создается &lt;br&gt; _ _ _ _ _&lt;br&gt;&amp;#124;1&amp;#124;2&amp;#124;3&amp;#124;4&amp;#124;5&amp;#124; -rows &lt;br&gt; _   _&lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124;&lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124;&lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124;&lt;br&gt; _   _&lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124; &lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124;&lt;br&gt;&amp;#124;_&amp;#124; &amp;#124;_&amp;#124;&lt;br&gt; _   &lt;br&gt;&amp;#124;_&amp;#124;  &lt;br&gt;&amp;#124;_&amp;#124; &lt;br&gt;&amp;#124;_&amp;#124; &lt;br&gt;&lt;br&gt;как то так =) &lt;br&gt;имею в виду что я думал &lt;br&gt;&#092;&#092; вначале создается столбец длинной ncolumns &lt;br&gt;for (i=0;i&amp;lt;ncolumns;i++)&lt;br&gt;    *(array+</description>

<item>
    <title>Выделение памяти под двумерный массив (MKuznetsov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9162.html#4</link>
    <pubDate>Thu, 23 Jun 2011 17:16:27 GMT</pubDate>
    <description>можно вообще взять большой кус памяти и самому разметить как хочется &lt;br&gt;&lt;br&gt;/** просто иллюстрация - даже непроверял */&lt;br&gt;void **malloc2d(int xdim,int ydim,size_t itemsize) &#123;&lt;br&gt;int x,y;&lt;br&gt;void *p;&lt;br&gt;void **row;&lt;br&gt;size_t size=sizeof(void *)*ydim+(xdim*ydim*itemsize);&lt;br&gt;row=(void **)p=malloc(size);&lt;br&gt;for(y=0;y&amp;lt;ydim;y++) &lt;br&gt;row&#091;y&#093;=(void *)(((char *)(row+ydim))+y*xdim*itemsize);&lt;br&gt;return (void **)p;&lt;br&gt;&#125;&lt;br&gt;</description>
</item>

<item>
    <title>Выделение памяти под двумерный массив (gpl77)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9162.html#3</link>
    <pubDate>Wed, 15 Jun 2011 09:16:46 GMT</pubDate>
    <description>&amp;gt; Доброго времени суток &lt;br&gt;&amp;gt; помогите разобраться..запутался-выделение памяти под двумерный массив &lt;br&gt;&lt;br&gt;http://c-faq.com/aryptr/dynmuldimary.html&lt;br&gt;</description>
</item>

<item>
    <title>Выделение памяти под двумерный массив (XAnder)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9162.html#2</link>
    <pubDate>Wed, 15 Jun 2011 04:36:28 GMT</pubDate>
    <description>&amp;gt; не могу понять почему мы вначале выделяем память под строки , а &lt;br&gt;&amp;gt; потом под столбцы &lt;br&gt;&lt;br&gt;Нужно выяснить, кто такие &quot;мы&quot;, и спросить у них, зачем они так делают ;-) На самом деле здесь нет никакой разницы, что сначала - строки или столбцы. А, учитывая что все строки имеют одинаковую длину, и столбцы - тоже, можно вообще обойтись простым массивом и не городить циклы с malloc&apos;ами.&lt;br&gt;&lt;br&gt;&amp;gt; получается , что создается ...&lt;br&gt;&lt;br&gt;Приведённая схема, дальнейшие рассуждения и вопрос непонятны, постарайтесь сформулировать чётче.&lt;br&gt;</description>
</item>

<item>
    <title>Выделение памяти под двумерный массив (PavelR)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9162.html#1</link>
    <pubDate>Wed, 15 Jun 2011 04:35:11 GMT</pubDate>
    <description>&amp;gt; Доброго времени суток &lt;br&gt;&amp;gt; помогите разобраться..запутался-выделение памяти под двумерный массив &lt;br&gt;&amp;gt;   int **array1 = (int **)malloc(nrows * sizeof(int *)); &lt;br&gt;&amp;gt;         for(i = 0; i  &amp;lt; nrows; i++) &lt;br&gt;&amp;gt;         array1&#091;i&#093; = (int *)malloc(ncolumns * sizeof(int)); &lt;br&gt;&amp;gt; не могу понять почему мы вначале выделяем память под строки , а &lt;br&gt;&amp;gt; потом под столбцы &lt;br&gt;&lt;br&gt;Ну можете считать первый индекс столбцом, а второй строками, код от этого не изменится &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; т.е &lt;br&gt;&amp;gt; &#092;&#092;пускай будет char для наглядности &lt;br&gt;&amp;gt;   char **array1 = (char **)malloc(5 * sizeof(char*)); &lt;br&gt;&amp;gt;         for(i = 0; i &amp;lt; 5; i++) &lt;br&gt;&amp;gt;         array1&#091;i&#093; = (char *)malloc(3 * sizeof(char)); &lt;br&gt;&amp;gt; получается , что создается &lt;br&gt;&lt;br&gt;ну как-то так =)  &lt;br&gt;&lt;br&gt;&amp;gt; как то так =) &lt;br&gt;&amp;gt; имею в виду что я думал &lt;br&gt;&amp;gt; &#092;&#092; вначале создается столбец длинной ncolumns &lt;br&gt;&amp;gt; for (i=0;i&amp;lt;ncolumns;i++) &lt;br&gt;&amp;gt;     *(array+i) &lt;br&gt;&lt;br&gt;ой, какой-то бред. &lt;br&gt;Что значит - создается ? Ничего не создается - _выделяется память_. &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; &#092;&#092;и каждый указатель в array&#091;i&#093; указывает на выделенную память длинной nrows*sizeo</description>
</item>

</channel>
</rss>
