<?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[Arraygröße nachträglich verändern]]></title><description><![CDATA[<p>Meine Problematik: Ich brauche im haupt-programmablauf ein Array, welches erst in einer aufgerufenen Methode (welche sich wiederrum in einer anderen Klasse befindet) in seiner größe definiert und beschrieben wird. Das ganze soll funktionieren, ohne das Array kopieren zu müssen. Ich hab das ganze mal versucht, indem ich es im hauptprogramm anlege, einen zeiger auf das array an die Methode weitergebe und erst in der methode initialisiere ... aber dabei kommt nur nen ungültiger pointer bei raus. Wie würde man das nun tun, wenn man wüsste WAS man tut? <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>
<pre><code>unsigned char* myarray;// = new unsigned char[8];

int _tmain(int argc, _TCHAR* argv[])
{
	myclass* test = new myclass(myarray);
	test-&gt;fill();

	return 0;
}
</code></pre>
<pre><code>unsigned char* a;

myclass::myclass(unsigned char* iarray)
{
	iarray = new unsigned char[16];
	a = iarray;
}

int myclass::fill()
{
	for(int i = 0; i&lt;16; i++)
	{
		a[i] = i+1;
	}
	return 0;
}

myclass::~myclass(void)
{
}
</code></pre>
<p>Der Code so wie er ist ist stark vereinfacht. Das Array wird später &gt; 12 Mio. felder groß sein, und es gibt keine möglichkeit vorher rauszufinden, wie groß es sein muss!</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><strong>--------------------------------EDIT-----------------------------------</strong></p>
<p>Hatte mal gerade ne idee ... wäre das Politisch korrekt? Ich gebe ihm doch nur den zeiger zu der adresse zurück, kopiert wird doch nichts, oder?</p>
<pre><code>unsigned char* myarray;

int _tmain(int argc, _TCHAR* argv[])
{
	myclass* test = new myclass(myarray);

	myarray = test-&gt;fill();
	for(int i = 0; i&lt;16 ; i++)
	{	
		printf(&quot;%i\t&quot;, myarray[i]);
		if(myarray[i]%4 == 0 &amp;&amp; i != 0)
		{
			printf(&quot;\n&quot;);
		}
	}
	_getch();
	return 0;
}
</code></pre>
<pre><code>unsigned char* a;

myclass::myclass(unsigned char* iarray)
{
	iarray = new unsigned char[16];
	a = iarray;
}

unsigned char* myclass::fill()
{
	for(int i = 0; i&lt;16; i++)
	{
		a[i] = i+1;
	}
	return a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245485/arraygröße-nachträglich-verändern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 19:29:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245485.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Jul 2009 18:58:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:08:14 GMT]]></title><description><![CDATA[<p>Meine Problematik: Ich brauche im haupt-programmablauf ein Array, welches erst in einer aufgerufenen Methode (welche sich wiederrum in einer anderen Klasse befindet) in seiner größe definiert und beschrieben wird. Das ganze soll funktionieren, ohne das Array kopieren zu müssen. Ich hab das ganze mal versucht, indem ich es im hauptprogramm anlege, einen zeiger auf das array an die Methode weitergebe und erst in der methode initialisiere ... aber dabei kommt nur nen ungültiger pointer bei raus. Wie würde man das nun tun, wenn man wüsste WAS man tut? <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>
<pre><code>unsigned char* myarray;// = new unsigned char[8];

int _tmain(int argc, _TCHAR* argv[])
{
	myclass* test = new myclass(myarray);
	test-&gt;fill();

	return 0;
}
</code></pre>
<pre><code>unsigned char* a;

myclass::myclass(unsigned char* iarray)
{
	iarray = new unsigned char[16];
	a = iarray;
}

int myclass::fill()
{
	for(int i = 0; i&lt;16; i++)
	{
		a[i] = i+1;
	}
	return 0;
}

myclass::~myclass(void)
{
}
</code></pre>
<p>Der Code so wie er ist ist stark vereinfacht. Das Array wird später &gt; 12 Mio. felder groß sein, und es gibt keine möglichkeit vorher rauszufinden, wie groß es sein muss!</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><strong>--------------------------------EDIT-----------------------------------</strong></p>
<p>Hatte mal gerade ne idee ... wäre das Politisch korrekt? Ich gebe ihm doch nur den zeiger zu der adresse zurück, kopiert wird doch nichts, oder?</p>
<pre><code>unsigned char* myarray;

int _tmain(int argc, _TCHAR* argv[])
{
	myclass* test = new myclass(myarray);

	myarray = test-&gt;fill();
	for(int i = 0; i&lt;16 ; i++)
	{	
		printf(&quot;%i\t&quot;, myarray[i]);
		if(myarray[i]%4 == 0 &amp;&amp; i != 0)
		{
			printf(&quot;\n&quot;);
		}
	}
	_getch();
	return 0;
}
</code></pre>
<pre><code>unsigned char* a;

myclass::myclass(unsigned char* iarray)
{
	iarray = new unsigned char[16];
	a = iarray;
}

unsigned char* myclass::fill()
{
	for(int i = 0; i&lt;16; i++)
	{
		a[i] = i+1;
	}
	return a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1743021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743021</guid><dc:creator><![CDATA[blacksheep1]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:24:08 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; Das Array wird später &gt; 12 Mio. felder groß sein</p>
</blockquote>
<p>Ganz sicher, dass du so eine bombastische Größe von über 12MB RAM während der Runtime wirklich brauchst? Für was ist das gut, wenn ich fragen darf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p><strong>Edit:<br />
Naja, je nach dem, wie viele Ressourcen du hast, kannst du einen std::vector/list/was auch immer verwenden, je nach Iterator-Art. Aber bei so einer Datenmänge wird das sind ganz unerheblich. Bei meinem Win32 hat ein Char-Verktor 12 Bytes Größe, macht unterm Strich dann mindestens 144MB RAM. Array ist sparsam, aber recht unflexibel, vector ist sehr flexibel, aber kostet.<br />
Alternativ: du baust schnell eine eigene, kleine verkettete Liste, die zwar weniger Methoden als die STL hat, aber dafür schlanker ist.</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743027</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:17:44 GMT]]></title><description><![CDATA[<p>- Was Du willst ist ein Vektor ( <code>std::vector&lt;&gt;</code> ).<br />
- Globale Variablen sind böse.<br />
- _tmain ist nicht standardkonform sondern Microsoft-spezifisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743031</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:26:54 GMT]]></title><description><![CDATA[<p>@ Ad aCTa</p>
<p>Joup, muss, geht ums auslesen einer Farb-Zeilenkamera.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a><br />
- Welche vorteile hätte ein Vektor? Weil funktionieren tuts schon wies in meinem edit ist. <strong>[Edit] Ok, selbstnachschlagen macht schlau! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></strong><br />
- Ok, dann werde ich sie in die hölle schicken <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="😃"
    /><br />
- Aber ist doch immernoch C++, oder?</p>
<p><strong>[Edit]</strong> Die sache mit dem Vektor ist die, die API der kamera liefert ein char-array. <strong>[Edit]</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743033</guid><dc:creator><![CDATA[blacksheep1]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:29:45 GMT]]></title><description><![CDATA[<p>blacksheep1 schrieb:</p>
<blockquote>
<p>Welche vorteile hätte ein Vektor?</p>
</blockquote>
<p>Mit Vektoren kann man dynamisch hantieren. Außerdem musst du keinen Extra-Speicher allokiieren, du rufst einfach std::vector::push_back( ); auf und kannst ein neues Element hinzufügen.</p>
<p>blacksheep1 schrieb:</p>
<blockquote>
<p>Aber ist doch immernoch C++, oder?</p>
</blockquote>
<p>Da wir im C++-Forum sind: printf( ) und sein Datenerkennungsoperator &quot;%&quot; kommen aus der C-Standardbibliothek und haben in C++ nichts zu suchen. Benutze sattdessen std::cout.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743036</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:33:39 GMT]]></title><description><![CDATA[<p>check!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743038</guid><dc:creator><![CDATA[blacksheep1]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:33:39 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:32:01 GMT]]></title><description><![CDATA[<p>blacksheep1 schrieb:</p>
<blockquote>
<p>Wie würde ich &quot;%&quot; C++-konform ersetzen? <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>
</blockquote>
<p>Wegen dem Smiley: War das jetzt ironisch gemeint? Zur Frage: Der zu dem Ausgabestream gehörige &quot;&lt;&lt;&quot;-Operator erwartet eine Zeichenkette oder eine Variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743040</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:34:02 GMT]]></title><description><![CDATA[<p>ne, ham grad aneinander vorbeigeredet ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743043</guid><dc:creator><![CDATA[blacksheep1]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:38:09 GMT]]></title><description><![CDATA[<p>blacksheep1 schrieb:</p>
<blockquote>
<p>ne, ham grad aneinander vorbeigeredet ^^</p>
</blockquote>
<p>Nein, warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743045</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:38:50 GMT]]></title><description><![CDATA[<p>ich sehe mehrere möglichkeiten:</p>
<p>- mach den zeiger zur membervariable<br />
- schreib ne methode, die einen charzeiger liefert<br />
- last, not least, schreib deine funktion um:<br />
myclass::myclass(unsigned char** iarray, int n)<br />
{<br />
*iarray = new unsigned char[n];<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743046</guid><dc:creator><![CDATA[memb0r]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:39:38 GMT]]></title><description><![CDATA[<p>doch, ich dachte du meintest mit dem &quot;%&quot; das modulo, und nicht den &quot;Datenerkennungsoperator&quot; vom Printf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743048</guid><dc:creator><![CDATA[blacksheep1]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:42:06 GMT]]></title><description><![CDATA[<p>blacksheep1 schrieb:</p>
<blockquote>
<p>doch, ich dachte du meintest mit dem &quot;%&quot; das modulo, und nicht den &quot;Datenerkennungsoperator&quot; vom Printf.</p>
</blockquote>
<p>Nein, dass hätte vom Kontext her doch überhaupt nicht gepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743052</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 19:44:19 GMT]]></title><description><![CDATA[<p>Das rohe char-Array funktioniert normalerweise auch mit std::vector in dem du einen Speicherbereich bei der Instanziierung des Vektors angibst.<br />
Siehe dazu:<br />
<a href="http://cplusplus.com/reference/stl/vector/vector/" rel="nofollow">http://cplusplus.com/reference/stl/vector/vector/</a> , speziell die Version</p>
<pre><code class="language-cpp">template &lt;class InputIterator&gt; vector ( InputIterator first, InputIterator last, const Allocator&amp; = Allocator() );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1743053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743053</guid><dc:creator><![CDATA[Cox]]></dc:creator><pubDate>Tue, 14 Jul 2009 19:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Arraygröße nachträglich verändern on Tue, 14 Jul 2009 23:16:53 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p><strong>Alternativ: du baust schnell eine eigene, kleine verkettete Liste, die zwar weniger Methoden als die STL hat, aber dafür schlanker ist.</strong></p>
</blockquote>
<p>Verkettete Listen sind nicht besonders speichersparend, da recht viele Zeiger nur für die Funktionalität des Containers benötigt werden. Gerade wenn es um <code>char</code> geht; da wird pro Element 1 Byte für die Daten und 8 Bytes für die zwei Zeiger verwendet. Eine effektive Nutzung von ungefähr einem Neuntel des angeforderten Speichers (evtl. sogar noch weniger durch Alignment) scheint mir nicht besonders platzsparend.</p>
<p>Dafür sollte <code>std::vector</code> geeigneter sein. Eine eigene Klasse dafür zu basteln ist nicht unbedingt nötig, ein <code>std::vector</code> hat normalerweise ein paar wenige Bytes Overhead, die eigentlich nicht notwendig wären.</p>
<p>blacksheep1 schrieb:</p>
<blockquote>
<p><strong>[Edit]</strong> Die sache mit dem Vektor ist die, die API der kamera liefert ein char-array. <strong>[Edit]</strong></p>
</blockquote>
<p>Das kannst du ja in einen Vector einfügen. Wie wurde der Speicher angefordert?</p>
<p>Eventuell kannst du doch eine eigene kleine Containerklasse schreiben, damit du den Inhalt (die <code>char</code> s) nicht kopieren musst, sondern direkt in den Container verschieben kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743146</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jul 2009 23:16:53 GMT</pubDate></item></channel></rss>