<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[arrayübergabe &#x2F; array kopieren]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>folgendes Problem:<br />
ich habe auf der einen seite folgenden code:</p>
<pre><code class="language-cpp">unsigned char *imgData = new unsigned char[m_size];
		fread(imgData,m_size,1,f);
		m_bmp-&gt;setImgData(imgData);
		//delete[] imgData;
</code></pre>
<p>das array soll in der methode setImgDate weiterübergeben werden an ein objekt einer anderen klasse. dort hab ich als membervariable ebenfalls ein Array zunächst mal in der headerdatei mit unsigned char* m_imgData;</p>
<p>jetzt soll das parameterarray auf dem m_imgData array kopiert werden eben in der methode</p>
<pre><code class="language-cpp">bool CPixelFormat_24bit::setImgData(unsigned char *imgData) {
  m_imgData = imgData;
	return true;
}
</code></pre>
<p>leider funktioniert das ganze nicht und spuckt mir einen segmenation fault aus....<br />
kann mir jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238192/arrayübergabe-array-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 03:26:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238192.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Apr 2009 17:21:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 17:21:02 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>folgendes Problem:<br />
ich habe auf der einen seite folgenden code:</p>
<pre><code class="language-cpp">unsigned char *imgData = new unsigned char[m_size];
		fread(imgData,m_size,1,f);
		m_bmp-&gt;setImgData(imgData);
		//delete[] imgData;
</code></pre>
<p>das array soll in der methode setImgDate weiterübergeben werden an ein objekt einer anderen klasse. dort hab ich als membervariable ebenfalls ein Array zunächst mal in der headerdatei mit unsigned char* m_imgData;</p>
<p>jetzt soll das parameterarray auf dem m_imgData array kopiert werden eben in der methode</p>
<pre><code class="language-cpp">bool CPixelFormat_24bit::setImgData(unsigned char *imgData) {
  m_imgData = imgData;
	return true;
}
</code></pre>
<p>leider funktioniert das ganze nicht und spuckt mir einen segmenation fault aus....<br />
kann mir jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692465</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 17:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 18:19:43 GMT]]></title><description><![CDATA[<p>Du setzt nur einen Zeiger. Danach zeigen mehrere Zeiger auf das dynamische Array.</p>
<p>Was du suchst, ist die STL-Funktion <code>std::copy()</code> . Allerdings würde ich dir gleich raten, zu einem Container wie <code>std::vector</code> zu wechseln, damit bist du grundsätzlich flexibler und kannst Kopien ganz einfach und intuitiv durchführen. Das Gleiche gilt fürs Anhängen und Entfernen einzelner Elemente, Leeren des Containers, und so weiter. Die ganze Speicherverwaltung wird dir abgenommen. Schau mal unter <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a>.</p>
<p>Wo wir gerade bei Speicherverwaltung sind: Hast du daran gedacht, dein dynamisches Array mit <code>delete[]</code> wieder freizugeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692495</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 18:59:38 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Du setzt nur einen Zeiger. Danach zeigen mehrere Zeiger auf das dynamische Array.</p>
</blockquote>
<p>wieso meinst du?<br />
in der ersten klasse erzeug ich einen zeiger:</p>
<pre><code class="language-cpp">unsigned char *imgData = new unsigned char[m_size];
        fread(imgData,m_size,1,f);
        m_bmp-&gt;setImgData(imgData);
</code></pre>
<p>das array wird an m_bmp-&gt;setImgData(..) übergeben.</p>
<p>in der anderen klasse hab ich im headerfile auch einen zeiger definiert<br />
Header:</p>
<pre><code class="language-cpp">...
..
private:
unsigned char* m_imgData;
...
..
</code></pre>
<p>und das array soll einfach kopiert werden...</p>
<pre><code class="language-cpp">bool CPixelFormat_24bit::setImgData(unsigned char *imgData) {
  memcpy(imgData, m_imgData, sizeof(imgData)); //hab hier mal die varieante mit memcpy()...geht auch nicht..
    return true;
}
</code></pre>
<p>wo zeigen mehrere zeiger auf was? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692513</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 18:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 19:31:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">m_imgData = imgData;
</code></pre>
<p>In dieser Zeile weist du einen Zeiger einem anderen zu. Danach zeigen mehrere Zeiger auf deinen Speicherbereich von <code>unsigned char</code> s.</p>
<p>Du solltest auch nicht <code>memcpy()</code> verwenden. Schau doch mal, welche Funktionen und Klassen ich angesprochen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692532</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Apr 2009 19:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 19:42:38 GMT]]></title><description><![CDATA[<p>nagut, dann wäre das mit std::copy irgendwie so--&gt;</p>
<pre><code class="language-cpp">copy ( imgData,imgData + sizeof(imgData), m_imgData );
</code></pre>
<p>wiederrum compilierbar aber nicht lauffähig ..liegt wahrscheinlich wieder am problem mit den pointern? muss ich die dinger nicht alle dereferenzieren? aber dann mäckert der compiler..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692536</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 19:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 19:54:50 GMT]]></title><description><![CDATA[<p><code>sizeof(imgData)</code> gibt dir die Grösse des Typen zurück. In diesem Falle von <code>unsigned char*</code> , und die ist meistens 4 Byte.</p>
<p>Übergib die Grösse des Arrays als zusätzlichen Parameter. Würdest du STL-Container einsetzen, hättest du alle diese Probleme nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692545</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Apr 2009 19:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 20:04:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Übergib die Grösse des Arrays als zusätzlichen Parameter. Würdest du STL-Container einsetzen, hättest du alle diese Probleme nicht...</p>
</blockquote>
<p>ja das glaube ich dir, allerdings möchte ich jetzt nich meinen gesammten code umschreiben müssen wegen dieser (kleinen) sache. mich interessiert im moment nur folgendes: warum zum teufel bekomm ich andauernd segmentation fault...<br />
size übergebe ich nun als parameter mit und:</p>
<pre><code class="language-cpp">copy ( imgData,imgData, size, m_imgData );
</code></pre>
<p>das hält mich jetzt schon fast 2 stunden auf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692549</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 20:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 20:10:43 GMT]]></title><description><![CDATA[<p>cryps schrieb:</p>
<blockquote>
<pre><code class="language-cpp">copy ( imgData,imgData, size, m_imgData );
</code></pre>
</blockquote>
<p>Kannst du ein Stück <strong>kompilierbaren</strong> Code zeigen, am besten mit dem Kontext in der Funktion und der Erstellung des ursprünglichen Arrays?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692552</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Apr 2009 20:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Fri, 17 Apr 2009 10:58:11 GMT]]></title><description><![CDATA[<p>--</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692555</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 22:59:31 GMT]]></title><description><![CDATA[<p>--</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692585</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 22:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Tue, 07 Apr 2009 22:58:50 GMT]]></title><description><![CDATA[<p>okay...<br />
nach langem rumprobieren bin ich jetzt zwar schon recht verzweifelt.. aufgeben tu ich trotzdem noch nicht...</p>
<p>kann es sein, dass man in c++ eine Membervariable nich aus jeder Methode der klasse zu beliebigem zeitpunkt beschreiben darf?<br />
anders kann ichs mir nicht mehr erklären....</p>
<p>hmm also zB.folgendes szenario:<br />
ich habe eine klasse A die erzeuge ein objekt der Klasse B. in der Klasse B gibt es eine Membervariable int value; dieses Objekt ist in der Klasse A mittels Komposition eingebettet.<br />
nun übergibt eine Methode der KLasse A einen integer als parameter an dieses Objekt (bzw. an eine Methode des Objekts). dieser Übergebene Wert wird nun der Membervariable von Klasse B zugewiesen.</p>
<p>Kann es sein dass sowas nicht geht?</p>
<p>A.h:</p>
<pre><code class="language-cpp">class A{
public:
	A();
	virtual ~A);
        void setValue();

private:
	B* OBJB;

};
</code></pre>
<p>Klasse A:</p>
<pre><code class="language-cpp">A::A(){
B = new B();
}
A::~A(){}

void A::setValue() {
  B-&gt;setValue(50);
}
</code></pre>
<p>B.h:</p>
<pre><code class="language-cpp">class B{
public:
	B();
	virtual ~B();
        void setValue(int b);

private:
	int value;

};
</code></pre>
<p>Klasse B</p>
<pre><code class="language-cpp">B::B(){}
B::~B{}

B::setValue(int b) {
this-&gt;value = b;           // SEGMENTATION FAULT
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1692591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692591</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Tue, 07 Apr 2009 22:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 00:28:52 GMT]]></title><description><![CDATA[<p>Ich würde mal so spontan raten und sagen, dass in der Klasse A der Zeiger auf B ungültig ist. Womöglich löschst du das Objekt irgendwo und greifst später dann trotzdem darauf zu.</p>
<p>Grundsätzlich kann ich aber fast nur das sagen, was Nexus schon gesagt hat:<br />
Kannst du ein Stück <em><strong>kompilierbaren</strong></em> Code zeigen, welcher den Fehler reproduziert und dazu kurz gehalten ist?</p>
<p>(hab mir erlaubt, das Entscheidende noch deutlicher hervorzuheben :))</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692611</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 08 Apr 2009 00:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 08:09:10 GMT]]></title><description><![CDATA[<p>cryps schrieb:</p>
<blockquote>
<p>ja das glaube ich dir, allerdings möchte ich jetzt nich meinen gesammten code umschreiben müssen wegen dieser (kleinen) sache.</p>
</blockquote>
<p>So klein scheint die Sache für Dich ja nicht zu sein. Sonst würde es Dir nicht solche Schwierigkeiten bereiten.<br />
Vermutlich wärst Du schon lange fertig, wenn Du einen std::vetor benutzt hättest. Das man durch die Benutzung eines Vektors an einer Stelle den gesamten restlichen Code umschreiben muss ist auch ziemlich unwahrscheinlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692669</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 08 Apr 2009 08:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 08:17:11 GMT]]></title><description><![CDATA[<blockquote>
<p>B::B(){}<br />
B::~B{}</p>
<p>B::setValue(int b) {<br />
this-&gt;value = b; // SEGMENTATION FAULT<br />
}</p>
</blockquote>
<p>Kommt immer drauf an, wann und wo du dieses Gedöns aufrufst.<br />
Weiterhin ist in deiner Klasse A, die Klasse B gar nicht bekannt, weder durch ein vernünftiges include, noch über eine Vorwärtsdeklaration(eventuell hast du es nur nich mit hingeschrieben).<br />
So jetzt kommt auf das drauf an, was ich ganz oben schon geschrieben habe. Natürlich bist wärst du dir geholfen wenn du die Ratschläge der anderen annehmen würdest, <code>std::vector</code> und Konsorten machen die Sache wesentlich einfacherer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692676</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Wed, 08 Apr 2009 08:17:11 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 10:06:46 GMT]]></title><description><![CDATA[<p>Danke für die vielen Antworten...</p>
<p>Ich entschuldige mich dafür, dass es vielleicht etwas unverschämt rüber gekommen ist, dass ich eure Ratschläge nicht &quot;annimm&quot;... ich bin im gegenteil sehr dankbar dass es diese hilfe gibt....:)<br />
ich glaube ich habe meinen Fehler bereits gefunden... Der Segmentation Fault Error erschien schlicht und einfach deshalb weil in meinem Objektechaos dieses angesprochene Objekt noch gar nicht existierte.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Nichts desto trotz werde ich mich heute noch dazu setzen und das ganze wahrscheinlich doch mit std::vector umsetzen. wer weiß was ich später noch alles anfange .... da wäre es vielleicht doch gut nicht mit char* arrays rumzuhantieren.....<br />
funktioniert das ganze gleich wie mit arrays? bzw. kann ich den vector auch wie zuvor einfach so mit fread füllen?</p>
<pre><code class="language-cpp">vector&lt;char&gt; imgData;
fread(&amp;imgData,m_size,1,f);
</code></pre>
<p>liebe grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692740</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Wed, 08 Apr 2009 10:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 11:42:15 GMT]]></title><description><![CDATA[<p>cryps schrieb:</p>
<blockquote>
<p>funktioniert das ganze gleich wie mit arrays? bzw. kann ich den vector auch wie zuvor einfach so mit fread füllen?</p>
</blockquote>
<p>Wenn du C++ einsetzen willst, dann setze gleich vollständig C++ ein. Nimm keine C Funktionen für die Ein- und Ausgabe. In C++ hat man dafür Streams:<br />
<a href="http://www.cplusplus.com/reference/iostream/" rel="nofollow">http://www.cplusplus.com/reference/iostream/</a></p>
<p>Es kommt ganz darauf an, was du machen willst beim Auslesen des Files. Erst dann kann ich dir sagen, wie du dies einsetzen kannst.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692805</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 08 Apr 2009 11:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 11:48:04 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Es kommt ganz darauf an, was du machen willst beim Auslesen des Files. Erst dann kann ich dir sagen, wie du dies einsetzen kannst.</p>
<p>Grüssli</p>
</blockquote>
<p>Ich lese ein bmp file im binären modus ein...das funktioniert ganz gut mit fread... das fread bei diesem code liest die bildinformationen (nicht den header) der größe m_size ein und früher hab ich das eben in ein char* array namens imgData hineingespeichert... funktioniert das auch mit dem vector jetzt?<br />
ich kanns atm nicht ausprobieren....</p>
<p>lg</p>
<pre><code class="language-cpp">vector&lt;char&gt; imgData;
fread(&amp;imgData,m_size,1,f);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1692813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692813</guid><dc:creator><![CDATA[cryps]]></dc:creator><pubDate>Wed, 08 Apr 2009 11:48:04 GMT</pubDate></item><item><title><![CDATA[Reply to arrayübergabe &#x2F; array kopieren on Wed, 08 Apr 2009 12:01:09 GMT]]></title><description><![CDATA[<p>cryps schrieb:</p>
<blockquote>
<p>Ich lese ein bmp file im binären modus ein...das funktioniert ganz gut mit fread... das fread bei diesem code liest die bildinformationen (nicht den header) der größe m_size ein und früher hab ich das eben in ein char* array namens imgData hineingespeichert... funktioniert das auch mit dem vector jetzt?<br />
ich kanns atm nicht ausprobieren....</p>
</blockquote>
<p>Nein, das geht so nicht. Du musst den Vector zuerst anweisen Speicher zu reservieren. Dann musst du einen Zeiger auf den internen Speicher der fread Funktion übergeben und kannst in den Speicherbereich lesen.<br />
Allerdings wundert es mich, dass dies früher bei dir funktioniert haben soll, denn du benutzt die fread Funktion sowieso falsch, auch ohne <code>std::vector</code> .<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdio/fread/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstdio/fread/</a></p>
<p>Du hast die beiden mittleren Parameter meiner Meinung nach vertauscht.</p>
<p>Aber unter C++ würde ich das sowieso über einen std::ifstream machen. Also pseudomässig etwa so:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;fstream&gt;

int main()
{
  std::ifstream file(&quot;file.bmp&quot;, std::ios::binary | std::ios::in);

  // ...

  // Vektor erstellen und size Speicher reservieren.
  std::vector&lt;char&gt; imgData(size);

  // Zeiger auf erstes Element des zusammenhängenden Speicher holen
  // und dann in dieses Array size chars einlesen.
  file.read(&amp;imgData[0], size);

  // ...

  return 0;
}
</code></pre>
<p>Allerdings empfiehlt es sich wohl schon eher, dass du zuerst irgendwo ein Tutorial oder Buch zu C++ liest. Wenn du all diese Dinge noch nicht kennst, dann programmierst du ja eher C als C++.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1692819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1692819</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 08 Apr 2009 12:01:09 GMT</pubDate></item></channel></rss>