<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Проблема с указателями ;(</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html</link>
    <description>Доброго времени суток!&lt;br&gt;Есть некоторый код:&lt;br&gt;...&lt;br&gt;&lt;br&gt;void SomeFunct(struct RGB_s **Matrux)&lt;br&gt; &#123;&lt;br&gt;   ...&lt;br&gt;   Matrux = malloc(sizeof(struct RGB_s)*headerInfo.height);&lt;br&gt;    &lt;br&gt;     if(Matrux==NULL)&lt;br&gt;       &#123;&lt;br&gt;        printf(&quot;errr&quot;); return -4;&lt;br&gt;       &#125;;&lt;br&gt;&lt;br&gt;     for(i=0;i&amp;lt;headerInfo.height;i++)&lt;br&gt;       &#123;&lt;br&gt; Matrux&#091;i&#093; =  malloc(sizeof(struct RGB_s)*headerInfo.width);&lt;br&gt;         if(Matrux&#091;i&#093;==NULL)&lt;br&gt;            &#123;&lt;br&gt;      // printf(&quot;errrR&quot;); return -4;&lt;br&gt;            &#125;;     &lt;br&gt;       &#125;;&lt;br&gt;  &lt;br&gt;    ...&lt;br&gt; &#125;;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt; &#123;&lt;br&gt;   struct RGB_s **Matrux;&lt;br&gt;   &lt;br&gt;    SomeFunct(Matrux);&lt;br&gt;&lt;br&gt;    тут при обращении к полям Matrux программа валится в core. &lt;br&gt;    &lt;br&gt;&lt;br&gt;  return 0;&lt;br&gt; &#125;;&lt;br&gt;&lt;br&gt;Вопросы:&lt;br&gt;1. Почему так происходит?&lt;br&gt;2. Как исправить?&lt;br&gt;</description>

<item>
    <title>Проблема с указателями ;( (Alexx)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html#5</link>
    <pubDate>Tue, 24 Mar 2009 00:43:20 GMT</pubDate>
    <description> что у тебя в matrux -  элементы или указатели ?&lt;br&gt; ну неважно ... &lt;br&gt; &lt;br&gt;  факт тот, что адрес, полученный от malloc в функции &lt;br&gt;  надо отдать обратно main-у&lt;br&gt;&lt;br&gt;  типа так, если я правильно понял, что тебе нужно:&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;&#123;&lt;br&gt;   struct RGB_s *Matrux;  // это пока неинициализированный ptr&lt;br&gt;                          &lt;br&gt;   rc = Somefunc(&amp;Matrux);  // отдаем его адрес, ф-я должна выделить память и &lt;br&gt;                            //  инициализировать наш указатель&lt;br&gt;&lt;br&gt;   dosomething(Martux&#091;zzz&#093;-&amp;gt;field_of_your_struct);&lt;br&gt;&#125; &lt;br&gt;&lt;br&gt;&lt;br&gt; int Somefunc (struct RGB_s **Matrux)  // ptr to ptr &lt;br&gt;&#123;&lt;br&gt;   // для удобства можно завести локальный указатель&lt;br&gt;    struct RGB_s *Temp;&lt;br&gt;&lt;br&gt;    Temp = malloc(....);           // отхапали память&lt;br&gt;    if (Temp == NULL) &#123; .....&#125;;&lt;br&gt;&lt;br&gt;    *Matrux = Temp;                //  отдаем адрес отхапанной памяти  main-у&lt;br&gt;&lt;br&gt;    // теперь делай что хочешь с этой памятью - хоть тут, хоть в main&lt;br&gt;&lt;br&gt;&#125;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с указателями ;( (gaa)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html#4</link>
    <pubDate>Mon, 23 Mar 2009 18:16:37 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Либо передавать указатель на Matrux в SomeFunct (т.е. struct RGB_s ***), либо &lt;br&gt;&amp;gt;Подскажите тогда как выделить память если передавать указатель на Matrux в функции &lt;br&gt;&amp;gt;SomeFunct &lt;br&gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;&lt;br&gt;struct RGB_s &#123;&lt;br&gt;    int r,g,b;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;struct headerInfoSt &#123;&lt;br&gt;    int height;&lt;br&gt;    int width;&lt;br&gt;&#125; headerInfo;&lt;br&gt;&lt;br&gt;void SomeFunct(struct RGB_s ***Matrux_)&lt;br&gt;&#123;&lt;br&gt;    // здесь была ошибка с типом создаваемого значения. строка должна быть типа struct RGB_s*&lt;br&gt;    struct RGB_s **Matrux = (struct RGB_s**)malloc(sizeof(struct RGB_s*)*headerInfo.height);&lt;br&gt;&lt;br&gt;    // возвращаем значение &quot;наружу&quot;&lt;br&gt;    *Matrux_ = Matrux;&lt;br&gt;&lt;br&gt;    if(Matrux==NULL)&lt;br&gt;    &#123;&lt;br&gt;        printf(&quot;errr&quot;); //return -4;&lt;br&gt;    &#125;;&lt;br&gt;&lt;br&gt;    int i;&lt;br&gt;    for(i=0;i&amp;lt;headerInfo.height;i++)&lt;br&gt;    &#123;&lt;br&gt;        Matrux&#091;i&#093; =  malloc(sizeof(struct RGB_s)*headerInfo.width);&lt;br&gt;        if(Matrux&#091;i&#093;==NULL)&lt;br&gt;        &#123;&lt;br&gt;            // printf(&quot;errrR&quot;); return -4;&lt;br&gt;        &#125;;    &lt;br&gt;    &#125;;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;int main () &#123;&lt;br&gt;    headerInfo.height = 2;&lt;br&gt;    headerInfo.width = 3;&lt;br&gt;    </description>
</item>

<item>
    <title>Проблема с указателями ;( (Ivanoff)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html#3</link>
    <pubDate>Mon, 23 Mar 2009 17:12:59 GMT</pubDate>
    <description>&amp;gt;&lt;br&gt;&amp;gt;Либо передавать указатель на Matrux в SomeFunct (т.е. struct RGB_s ***), либо &lt;br&gt;&amp;gt;возвращать значение для Matrux из SomeFunct. &lt;br&gt;&lt;br&gt;Подскажите тогда как выделить память если передавать указатель на Matrux в функции SomeFunct&lt;br&gt;&lt;br&gt;вот так не работает:&lt;br&gt;&lt;br&gt;void SomeFunct(struct RGB_s ***Matrux)&lt;br&gt; &#123;&lt;br&gt;   ...&lt;br&gt;    *Matrux = (struct RGB_s **)malloc(sizeof(struct RGB_s)*headerInfo.height);&lt;br&gt;    &lt;br&gt;     if(Matrux==NULL)&lt;br&gt;       &#123;&lt;br&gt;        printf(&quot;errr&quot;); return -4;&lt;br&gt;       &#125;;&lt;br&gt;&lt;br&gt;     for(i=0;i&amp;lt;headerInfo.height;i++)&lt;br&gt;       &#123;&lt;br&gt; (*Matrux)&#091;i&#093; = (struct RGB_s *) malloc(sizeof(struct RGB_s)*headerInfo.width);&lt;br&gt;         if(Matrux&#091;i&#093;==NULL)&lt;br&gt;            &#123;&lt;br&gt;      // printf(&quot;errrR&quot;); return -4;&lt;br&gt;            &#125;;     &lt;br&gt;       &#125;;&lt;br&gt;   ...&lt;br&gt; &#125;;&lt;br&gt;&lt;br&gt;&amp;gt;И почитать всё же главу про указатели из учебника по программированию. &lt;br&gt;&lt;br&gt;Читал, но все же ястности нет ;(&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с указателями ;( (михаил)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html#2</link>
    <pubDate>Mon, 23 Mar 2009 16:59:21 GMT</pubDate>
    <description>&amp;gt;1. Почему так происходит? &lt;br&gt;&lt;br&gt;Проверь изменяется ли Matrux после вызова SomeFunct? Передача параметра по значению.&lt;br&gt;&lt;br&gt;&amp;gt;2. Как исправить? &lt;br&gt;&lt;br&gt;Не передавать параметр по значению если интересен результат его изменения в функции.&lt;br&gt;&lt;br&gt;Например функция может вернуть значение.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Проблема с указателями ;( (gaa)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID9/8170.html#1</link>
    <pubDate>Mon, 23 Mar 2009 16:28:32 GMT</pubDate>
    <description>&amp;gt;1. Почему так происходит? &lt;br&gt;&lt;br&gt;Потому что указатель изменяется только внутри SomeFunct.&lt;br&gt;&lt;br&gt;&amp;gt;2. Как исправить? &lt;br&gt;&lt;br&gt;Либо передавать указатель на Matrux в SomeFunct (т.е. struct RGB_s ***), либо возвращать значение для Matrux из SomeFunct.&lt;br&gt;&lt;br&gt;И почитать всё же главу про указатели из учебника по программированию.&lt;br&gt;</description>
</item>

</channel>
</rss>
