<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Problem mit malloc unter C (linux)</title>
    <link>http://forum.geizhals.at/feed.jsp?id=551865</link>
    <description>Geizhals-Forum</description>
    <item>
      <title>Re(3): Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4626380.html#4626380</link>
      <description>Asche auf mein Haupt &lt;img src="schief.gif" width="16" height="19" align="absmiddle" alt=":-/"/&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Thu, 14 Feb 2008 08:23:44 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4626380.html#4626380</guid>
      <dc:creator>mike222</dc:creator>
      <dc:date>2008-02-14T08:23:44Z</dc:date>
    </item>
    <item>
      <title>Re(2): Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4626245.html#4626245</link>
      <description>Das Problem ist nur das es Referenzen nur in C++ gibt &lt;img src="smile.gif" width="16" height="19" align="absmiddle" alt=":)"/&gt;.&lt;br&gt;Mit einem C Compiler geht das nicht.&lt;br/&gt;</description>
      <pubDate>Thu, 14 Feb 2008 06:08:44 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4626245.html#4626245</guid>
      <dc:creator>Switi</dc:creator>
      <dc:date>2008-02-14T06:08:44Z</dc:date>
    </item>
    <item>
      <title>Re: Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4625389.html#4625389</link>
      <description>Ich persönlich finde es schöner, wenn Die Funktion als Reference-Pointer ausgeführt wird: &lt;br&gt;&lt;br&gt;void testAlloc(unsigned int length, float *&amp;myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; myArray = (float *) malloc(length * sizeof(float));&lt;br&gt;}&lt;br&gt;&lt;br&gt;main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; float *floatTest;&lt;br&gt;&amp;nbsp;&amp;nbsp; testAlloc(20, floatTest); /* ohne Rückgabe sondern Call by Reference */&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest[7] = 23.3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* hier tritt seqfault auf */&lt;br&gt;&amp;nbsp;&amp;nbsp; printf("%f\n", floatTest[7]; fflush(stdout);&lt;br&gt;}&lt;br&gt;&lt;br&gt;Hab ich jetzt nicht getestet, sollte aber so funktionieren. Der Unterschied zu Deiner ursprünglichen Variante ist also nur das &amp;-Zeichen beim Parameter myArray. &lt;br&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Wed, 13 Feb 2008 14:35:13 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4625389.html#4625389</guid>
      <dc:creator>mike222</dc:creator>
      <dc:date>2008-02-13T14:35:13Z</dc:date>
    </item>
    <item>
      <title>Re(3): Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4622774.html#4622774</link>
      <description>Irrtum! Ein mehrdimensionales Array ist blos Konvention. &lt;br&gt;zb ein Array[4,4] ist das gleiche wie ein eindimensionales Array der Größe 16.&lt;br&gt;&lt;br&gt;Ergo bleibt alles so wie vorher:&lt;br&gt;&lt;br&gt;&lt;br&gt;void testAlloc(unsigned int cols, unsigned int rows, float **myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; *myArray = (float *) malloc(rows * cols * sizeof(float));&lt;br&gt;}&lt;br&gt;&lt;br&gt;lg Switi&lt;br/&gt;</description>
      <pubDate>Tue, 12 Feb 2008 08:43:31 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4622774.html#4622774</guid>
      <dc:creator>Switi</dc:creator>
      <dc:date>2008-02-12T08:43:31Z</dc:date>
    </item>
    <item>
      <title>Re(2): Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4622400.html#4622400</link>
      <description>&lt;blockquote&gt;&lt;em&gt; myArray muss Doppelpointer sein! Also ein Pointer auf den Pointer floatTest.&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;br&gt;Danke, dass malloc die Adresse ändert hab ich nicht bedacht!&lt;br&gt;&lt;br&gt;Eigentlich war das ja aber nur eine Testfunktion. Wenn ich nun einen allgemeineren Fall implementieren will. Also eine Subfunktion, die nicht ein eindimensionales Array sondern ein mehrdimensionales alloziieren soll. Was dann?&lt;br&gt;&lt;br&gt;zB ein 2-dimensionales Array hätte dann ja von Haus aus schon einen float **myArray -Doppelpointer. Müsste es dann ein 3-Fachpointer a la &lt;br&gt;&lt;br&gt;void testAlloc(unsigned int cols, unsigned int rows, float ***myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; **myArray = (float **) malloc(rows * cols * sizeof(float));&lt;br&gt;}&lt;br&gt;&lt;br&gt;sein?&lt;br&gt;&lt;br&gt;Und bei einem 3-dimensionalen ein float ****myArray Pointer?&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 21:14:45 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4622400.html#4622400</guid>
      <dc:creator>Gordon Gecko</dc:creator>
      <dc:date>2008-02-11T21:14:45Z</dc:date>
    </item>
    <item>
      <title>Re(2): Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4622214.html#4622214</link>
      <description>So ist es. Danke, dass du mir die Arbeit abgenommen hast &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 19:41:48 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4622214.html#4622214</guid>
      <dc:creator>[DUCK]Butcher</dc:creator>
      <dc:date>2008-02-11T19:41:48Z</dc:date>
    </item>
    <item>
      <title>Re: Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4621670.html#4621670</link>
      <description>#include &lt;stdio h/&gt;&lt;br&gt;#include &lt;stdlib h/&gt;&lt;br&gt;&lt;br&gt;float* testAlloc(unsigned int length, float *myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; if (myArray) free (myArray);&lt;br&gt;&amp;nbsp;&amp;nbsp; myArray = (float *) malloc(length);&lt;br&gt;&amp;nbsp;&amp;nbsp; return (myArray);&lt;br&gt;}&lt;br&gt;&lt;br&gt;main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; float *floatTest=NULL;&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest = testAlloc (20, floatTest);&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest[7] = 23.3f;&lt;br&gt;&amp;nbsp;&amp;nbsp; printf("%f\n", floatTest[7]);&lt;br&gt;}&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 14:33:11 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4621670.html#4621670</guid>
      <dc:creator>Knurz</dc:creator>
      <dc:date>2008-02-11T14:33:11Z</dc:date>
    </item>
    <item>
      <title>Re: Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4621668.html#4621668</link>
      <description>Zu Variante 1:&lt;br&gt;&lt;br&gt;Mit dem Aufruf von testAlloc legst du eine Kopie des Pointers floatTest an (myArray ist Kopie von floatTest - nicht identisch mit floatTest).&lt;br&gt;Mit myArray = (float *) malloc(length * sizeof(float)); allokierst du Speicher und setzt die Adresse des Pointer myArray neu. floatTest änderst du aber nicht! Nun ist myArray keine Kopie mehr.&lt;br&gt;&lt;br&gt;floatTest[7] = 23.3;&amp;nbsp;&amp;nbsp;greift nun irgendwo in einen nicht allokierten Speicherbereich, ergo Segfault.&lt;br&gt;&lt;br&gt;Reparatur: myArray muss Doppelpointer sein! Also ein Pointer auf den Pointer floatTest.&lt;br&gt;&lt;br&gt;myArray --&gt; floatTest --&gt;&amp;nbsp;&amp;nbsp;[Speicher]&lt;br&gt;&lt;br&gt;void testAlloc(unsigned int length, float **myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; // um floatTest ändern zu können einmal dereferenzieren:&lt;br&gt;&amp;nbsp;&amp;nbsp; *myArray = (float *) malloc(length * sizeof(float));&lt;br&gt;}&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; float *floatTest;&lt;br&gt;&amp;nbsp;&amp;nbsp; testAlloc(20, &amp;floatTest); /* Pointer auf Pointer übergeben */&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest[7] = 23.3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* kein segfault mehr*/&lt;br&gt;&amp;nbsp;&amp;nbsp; printf("%f\n", floatTest[7]; fflush(stdout);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;Biddeschön.&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 14:32:37 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4621668.html#4621668</guid>
      <dc:creator>Switi</dc:creator>
      <dc:date>2008-02-11T14:32:37Z</dc:date>
    </item>
    <item>
      <title>Re: Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4621569.html#4621569</link>
      <description>Ich glaube, das liegt daran, dass du versuchst, die Adresse von myarray zu verändern, da malloc einen Zeiger auf das Array zurückgibt. Nach testAlloc zeigt aber floatTest[7] wieder auf das ursprüngliche Array und nicht auf das, was malloc zurückgegeben hat (ohne Gewähr, bin kein C-Guru).&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 13:41:16 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4621569.html#4621569</guid>
      <dc:creator>komplexler</dc:creator>
      <dc:date>2008-02-11T13:41:16Z</dc:date>
    </item>
    <item>
      <title>Re: Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4621567.html#4621567</link>
      <description>(ich hab 0 ahnung)&lt;br&gt;&lt;br&gt;mich würd nur interessieren ob das&lt;br&gt;&lt;br&gt;void testAlloc(unsigned int length, float **myArray)&lt;br&gt;&lt;br&gt;die "lösung" ist.. ??&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 13:40:13 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4621567.html#4621567</guid>
      <dc:creator>adhoc</dc:creator>
      <dc:date>2008-02-11T13:40:13Z</dc:date>
    </item>
    <item>
      <title>Problem mit malloc unter C (linux)</title>
      <link>http://forum.geizhals.at/t551865,4621542.html#4621542</link>
      <description>ich habe zwei Varianten einer Subfunktion zum Reservieren von Speicher für ein Array implementiert (siehe unten). Das nur zum Test für kompliziertere Implementierungen.&lt;br&gt;&lt;br&gt;Leider ergibt sich ein mir unerklärlicher Fehler wenn ich die Subfunktion ohne Rückgabewert implementiere sondern einfach davon ausgehe, dass das Ganze mit Call by Reference des Zeigers (myArray) genauso funktioniert...(tut es aber nicht!)&lt;br&gt;&lt;br&gt;In Variante 1 sollte doch der übergebene Zeiger auch außerhalb der Funktion (also in main) nun auf den von malloc reservierten Speicher zeigen. &lt;br&gt;Wo ist mein Gedankenfehler? Wieso tritt hier ein Segmentation Fault auf?&lt;br&gt;&lt;br&gt;// Variante 1 &lt;br&gt;void testAlloc(unsigned int length, float *myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; myArray = (float *) malloc(length * sizeof(float));&lt;br&gt;}&lt;br&gt;&lt;br&gt;main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; float *floatTest;&lt;br&gt;&amp;nbsp;&amp;nbsp; testAlloc(20, floatTest); /* ohne Rückgabe sondern Call by Reference */&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest[7] = 23.3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* hier tritt seqfault auf */&lt;br&gt;&amp;nbsp;&amp;nbsp; printf("%f\n", floatTest[7]; fflush(stdout);&lt;br&gt;}&lt;br&gt;------------------------------------------------------------------------&lt;br&gt;// Variante 2&lt;br&gt;float *testAlloc(unsigned int length, float *myArray)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; myArray = (float *) malloc(length * sizeof(float));&lt;br&gt;&amp;nbsp;&amp;nbsp; return myArray;&lt;br&gt;}&lt;br&gt;&lt;br&gt;main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; float *floatTest;&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest = testAlloc(20, floatTest); /* mit Rückgabe */&lt;br&gt;&amp;nbsp;&amp;nbsp; floatTest[7] = 23.3;&lt;br&gt;&amp;nbsp;&amp;nbsp; printf("%f\n", floatTest[7]; fflush(stdout);&lt;br&gt;}&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Mon, 11 Feb 2008 13:21:02 GMT</pubDate>
      <guid>http://forum.geizhals.at/t551865,4621542.html#4621542</guid>
      <dc:creator>Gordon Gecko</dc:creator>
      <dc:date>2008-02-11T13:21:02Z</dc:date>
    </item>
  </channel>
</rss>
