<?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[Zeigerproblem]]></title><description><![CDATA[<p>Hallo,</p>
<p>weise ich folgender variable</p>
<pre><code class="language-cpp">unsigned char* ZDat1 = new unsigned char[5];
ZDat1[3] = 0x64;
</code></pre>
<p>den Hex Wert 64 zu funktioniert alles wunderbar und die daten werden in einer späteren funktion in die Datei geschrieben. Der Wert 0x64 ist auch in der Datei.</p>
<p>nutze ich das gleich in einer schleife</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; 5; i++)
{
ZDat1[i] = Random(127);
ShowMessage(IntToHex(ZDat1[i],2));
}
</code></pre>
<p>Der Wert in der MessageBox wird richtig dargestellt jedoch in die Datei wird ein anderer Wert geschrieben den er irgendwo aus dem Speicher zieht aber nichts mit dem gewünschten Wert zu tun hat. In Meinem Fall schreibt er immer 0x12 egal was Random für einen Wert ausgibt.</p>
<p>In beiden Fällen wird ZDat1 an eine Variable unsigned char* Data aus einer Structur übergeben die es in einen Zwischenpuffer einsortiert und danach mit fstream speichert.</p>
<p>Leider bin ich am Ende meines Lateins und habe heute den ganzen Tag in den Büchern gewelzt und bin nicht einen Millimenter weitergekommen. Ich hoffe mir kann Jansen, Anteri oder ein Crack helfen.</p>
<p>danke</p>
<p>waldseeduo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/108957/zeigerproblem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 05:06:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/108957.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 May 2005 00:43:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 00:43:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>weise ich folgender variable</p>
<pre><code class="language-cpp">unsigned char* ZDat1 = new unsigned char[5];
ZDat1[3] = 0x64;
</code></pre>
<p>den Hex Wert 64 zu funktioniert alles wunderbar und die daten werden in einer späteren funktion in die Datei geschrieben. Der Wert 0x64 ist auch in der Datei.</p>
<p>nutze ich das gleich in einer schleife</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; 5; i++)
{
ZDat1[i] = Random(127);
ShowMessage(IntToHex(ZDat1[i],2));
}
</code></pre>
<p>Der Wert in der MessageBox wird richtig dargestellt jedoch in die Datei wird ein anderer Wert geschrieben den er irgendwo aus dem Speicher zieht aber nichts mit dem gewünschten Wert zu tun hat. In Meinem Fall schreibt er immer 0x12 egal was Random für einen Wert ausgibt.</p>
<p>In beiden Fällen wird ZDat1 an eine Variable unsigned char* Data aus einer Structur übergeben die es in einen Zwischenpuffer einsortiert und danach mit fstream speichert.</p>
<p>Leider bin ich am Ende meines Lateins und habe heute den ganzen Tag in den Büchern gewelzt und bin nicht einen Millimenter weitergekommen. Ich hoffe mir kann Jansen, Anteri oder ein Crack helfen.</p>
<p>danke</p>
<p>waldseeduo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782024</guid><dc:creator><![CDATA[Waldseeduo]]></dc:creator><pubDate>Thu, 05 May 2005 00:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 01:27:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich habe deinen Code mal getestet (mit random statt Random...) und er hat soweit funktioniert. habe mir den inhalt von ZDat1 in ein TMemo ausgegeben und die werte sind auch recht zufällig ( != 0x12 ).<br />
mir scheint, dass dein fehler später auftaucht, aber wo, ist schwer zu sagen ohne quellcode <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>gruß, oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782026</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 01:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 09:47:12 GMT]]></title><description><![CDATA[<p>hallo vatertagler,</p>
<p>Danke Oli für die Hilfe. Der Sourccode ist mehr das sind über 5000 Zeilen. ich kann sie dir gern mal schicken.</p>
<p>die Übergabe von ZDat erfolgt auf die untern aufgeführt Struktur auf den Wert Data.</p>
<pre><code class="language-cpp">SysexEvent Muster;
Muster.Data = ZDat;
</code></pre>
<p>Die Funktion an die die Struktur mit Muster.Data übergeben wird liegt in einer anderen Unit. Wie bereits gesagt gebe ich den reinen Hex Wert vor der Compal. durch funktioniert es. Greife ich auf Random oder eine andere von der Funktion erzeugten Integer zu macht er eine undefinierte Zahl.</p>
<pre><code class="language-cpp">typedef struct {
        unsigned long int TicksFromStart;
        unsigned long int TicksFromLastEvent;

        unsigned char Status;
        unsigned char HerstellerID;
        unsigned long int Eventlaenge;
        unsigned char* Data;

} SysexEvent;
</code></pre>
<p>so langsam dreh ich am rad wegen einer kleinigkeit jetzt den 2. Tag am suchen.</p>
<p>gruss<br />
waldseeduo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782102</guid><dc:creator><![CDATA[Waldseeduo]]></dc:creator><pubDate>Thu, 05 May 2005 09:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 10:23:14 GMT]]></title><description><![CDATA[<p>hallo</p>
<p>hier ist der orginalcode</p>
<pre><code class="language-cpp">//Frames einfügen
unsigned char* ZDat1 = new unsigned char[7];
ZDat1[6] = 0xF7; ZDat1[0] = a.HerstellerID;  ZDat1[1] = 0x02 ;
ZDat1[2] = 0x01 ;  ZDat1[3] = 0x01 ;  ZDat1[4] = 0x01 ; ZDat1[5] = 0x01 ; ZDat1[7] = '\0';

for(int i = 0; i &lt; MaxTick; i = i + Framesabstand)
{
a.TicksFromStart = i;
ZDat1[2] = 0x00 ;  ZDat1[3] = 0x00 ;  ZDat1[4] = 0x00 ; ZDat1[5] = 0x00 ; ZDat1[7] = '\0';

ZDat1[2] = random(127);                                                                         
a.Data = ZDat1;

FHaupt-&gt;SMF1-&gt;AddSysex(a);
}
</code></pre>
<p>Nach meiner Vorstellung müsste ZDat1[2] einen Zufallswert enthalten jedoch wird immer der Wert 0x12 in die Datei geschrieben. Lass ich die Randomfunktion weg wird in die Datei 0x00 geschrieben.</p>
<p>Ändere ich den Wert ZDat1[2] = 0x03; Wird auch 0x03 in die Datei geschrieben.</p>
<p>danke<br />
waldseeduo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782118</guid><dc:creator><![CDATA[Waldseeduo]]></dc:creator><pubDate>Thu, 05 May 2005 10:23:14 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 13:17:08 GMT]]></title><description><![CDATA[<p>Hi Waldseeduo,<br />
soweit passt das doch wenn Du das random weg lässt schreibt er in die Datei doch genau das was Du erwartest.<br />
Ich glaube Dein Problem ist das die random Funktion nicht so zufäälig ist wie man sich das erhofft.<br />
Probier mal folgenden Code:</p>
<pre><code>//randomize();
unsigned char Z;
for (int i=0;i&lt;10;i++){
        Z=random(127);
        ShowMessage(Z);
}
</code></pre>
<p>Schau Dir dabei die Zahlen genau an. Dann beende das Programm und starte es neu.<br />
Du wirst dann feststellen, das genau die Werte die Du beim ersten mal gesehen hast, wieder kommen.<br />
Zur Verbesserung solltest Du das randomize() wieder &quot;Einkommentieren&quot;.</p>
<p>Gruß Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782236</guid><dc:creator><![CDATA[Alex_H]]></dc:creator><pubDate>Thu, 05 May 2005 13:17:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 14:00:05 GMT]]></title><description><![CDATA[<p>hallo alex,<br />
leider nicht, ich habe auch schon die zählervariable aus der schleife genommen es kommt immer der gleich wert und der müsste wenigstens von 0 - x zählen und den wert übergeben.</p>
<p>was ich nicht verstehe ist wenn ich ZDat einen wert zuweise ZDat1[2] = 0x20; Dann passt dass auch. Nur wenn zur Laufzeit auf ZDat1[2] ein Wert übergeben wird schüttelt er einen Wert der nirgends übergeben wurden. Üergebe ich zur Laufzeit 0x30 so erhalte ich z.B. 0x80</p>
<p>das macht ich stuzig. weise ich vor der laufzeit einen wert zu ist alles prima. mach ich es während der laufzeit gibt es probleme das die werte nicht stimmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782246</guid><dc:creator><![CDATA[waldseeeduo]]></dc:creator><pubDate>Thu, 05 May 2005 14:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 14:22:48 GMT]]></title><description><![CDATA[<p>Hi Waldseeduo,<br />
tut mir leid das ich Dir nicht weiterhelfen konnte, aber ich verweise jetzt mal auf <a href="http://www.junix.ch/bcb/help" rel="nofollow">http://www.junix.ch/bcb/help</a> debug das Programm bzw. die relevanten Teile doch mal step by step und schau Dir den Verlauf der Variable genau an, dann müßtest Du ja genau sehen, an welcher Stelle eine &quot;falsche Zuweisug&quot; ist, bzw wo Deine Variable verändert wird.</p>
<p>Gruß Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782253</guid><dc:creator><![CDATA[Alex_H]]></dc:creator><pubDate>Thu, 05 May 2005 14:22:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 15:16:39 GMT]]></title><description><![CDATA[<p>hallo alex,<br />
danke dir für die hilfe werde jetzt mal stück für stück durchhangeln</p>
<p>gruss<br />
waldsee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782280</guid><dc:creator><![CDATA[waldseedu]]></dc:creator><pubDate>Thu, 05 May 2005 15:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 16:57:21 GMT]]></title><description><![CDATA[<p>1. Du erzeugst ein Arrey mit new ...<br />
2. wo / wann gibst Du das frei???</p>
<p>Falls Freigabe VOR schreiben in Datei erfolgt, ist das Verhalten nachvollziehbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782332</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Thu, 05 May 2005 16:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 17:22:40 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich gebe es überhaupt nicht frei im augenblick.</p>
<p>verstehst du unter freigabe &quot;delete ZDat1;&quot;</p>
<p>leider bin ich ein wenig verwirrt mit dem debuggen da sind schon wieder andere werte als in die datei geschrieben wird.<br />
so langsam dreh ich echt am rad.</p>
<p>danke<br />
waldseeduo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782345</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 17:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 17:49:16 GMT]]></title><description><![CDATA[<p>Mir ist gerade noch so aufgefallen, dass du dies machst.</p>
<pre><code class="language-cpp">unsigned char* ZDat1 = new unsigned char[7];
//...
ZDat1[7] = '\0';
</code></pre>
<p>Das ist in keinem Fall eine gute Idee (Index zu groß). Vielleicht bringt eine Verbesserung hier was?</p>
<p>Gruß, Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782359</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 17:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 17:53:05 GMT]]></title><description><![CDATA[<p>waldsee schrieb:</p>
<blockquote>
<p>hallo,<br />
ich gebe es überhaupt nicht frei im augenblick.</p>
</blockquote>
<p>Das ist nicht gut!!!</p>
<p>waldsee schrieb:</p>
<blockquote>
<p>verstehst du unter freigabe &quot;delete ZDat1;&quot;</p>
</blockquote>
<p>Ja</p>
<p>waldsee schrieb:</p>
<blockquote>
<p>leider bin ich ein wenig verwirrt mit dem debuggen da sind schon wieder andere werte als in die datei geschrieben wird.<br />
so langsam dreh ich echt am rad.</p>
</blockquote>
<p>Das Verhalten deutet darauf hin, dass Du auf Daten im Speicher zugreifst, deren Adresse ungueltig / falsch ist!!!</p>
<p>Machst Du das new ... mehrmals???<br />
Verlierst Du irgendwo den Zeiger???</p>
<p>Was passiert nach new ... und der Eingabe der Daten bis zum schreiben der Daten in Datei mit dem Zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782362</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Thu, 05 May 2005 17:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:08:49 GMT]]></title><description><![CDATA[<p><a href="http://www.mira-multimedia.de/ablage/source.jpg" rel="nofollow">http://www.mira-multimedia.de/ablage/source.jpg</a></p>
<p>hier ist ein screenshoot. ich habe die funktion abgespeckt. die werte im debugger.</p>
<p>die zählervariable hat den wert 7</p>
<p>ich weis auch nicht warum die werte nicht stimmen von qwe.data</p>
<p>gruss<br />
waldsee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782370</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 18:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:15:06 GMT]]></title><description><![CDATA[<p><a href="http://www.mira-multimedia.de/ablage/source2.jpg" rel="nofollow">http://www.mira-multimedia.de/ablage/source2.jpg</a></p>
<p>Das bild hat eine Zählervariablenstand von 7 und trozdem ist Data im Debugger Leer!</p>
<p>Hier habe ich noch das gleiche nur dass ich die zählervariable an dqe.Data übergebe.</p>
<p>dqe ist die in den ersten postings aufgeführte struktur hier hat sieht data so aus.<br />
unsigned char* Data;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782372</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 18:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:15:47 GMT]]></title><description><![CDATA[<p>In deinem Screenshot ist das <strong>char-Feld</strong> immer noch nur <strong>7 Zeichen</strong> groß, du greifst aber auf <strong>8 Feldelemente</strong> zu in deiner for-Schleife! --&gt; gar nicht gut <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>
<p>Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782373</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 18:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:26:09 GMT]]></title><description><![CDATA[<p>Ts, Ts, Ts ....</p>
<p>1. Du erzeugst INNERHALB einer Funktion ein Temporaeres Array (Stack)<br />
2. Du fuellst das mit Werten (Naja)</p>
<p>3. Wo schreibst Du die Datei? In einer ANDEREN Funktion!!! Oder nicht?<br />
Wenn ja: Dein Datenfeld ist mit verlassen der Funktion UNGUELTIG. D.h. bei erstbester Gelegenheit werden die Daten da im RAM ueberschrieben!!!</p>
<p>- Du verlierst den Zeiger auf das Feld - <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>3. qwe.Data=&quot;&quot;; erzeugt eine Referenz auf einen String der Laenge Null!!! dhinter ist kein RAM reserviert!<br />
4. qwe.Data[s] greift damit HINTER Deine (leere) Stringvariable!!!<br />
Das kann nicht gut gehen!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/782376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782376</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Thu, 05 May 2005 18:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:31:06 GMT]]></title><description><![CDATA[<p>Wieso ist das Array temporär? Es wird mit <strong>new</strong> erzeugt, d.h. dynamisch und müsste doch auf dem dynamischen Speicher, dem Heap, abgelegt werden! Insofern müsste der Speicher auch außerhalb der Funktion zugreifbar sein. <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=":confused:"
      alt="😕"
    /></p>
<p>Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782379</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 18:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:37:40 GMT]]></title><description><![CDATA[<p>Aber die (Zeiger-) Variable ist im Stack!!!</p>
<p>Damit wird der Zeiger ungueltig UND im Heap bleibt ein LOCH!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782382</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Thu, 05 May 2005 18:37:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:49:56 GMT]]></title><description><![CDATA[<p>hi,</p>
<pre><code class="language-cpp">unsigned char* ZDat1 = new unsigned char[8];
for(int s = 0; s &lt; 8; s++)
{
ZDat1[s] = s;
}
delete ZDat1;
</code></pre>
<p>warum bleibt bei ZDat1 immer der Wert &quot;&quot; also kein Inhalt. Normal müsste doch nach dem schleifendurchlauf ZDat1[0] = 0, ZDat1[1] = 1 usw haben oder sehe ich da was falsch.</p>
<p>ich versuche stück für stück einzugrenzen und alles nicht benötigte mal wegzulassen. bitte altenburger schlage nicht die hände über dem kopf ich habe mir alles selbst beigebracht ich hab niemals nur eine edv stunde erhalten ich kann nur aus fehlern lernen und was ich in meinen büchern finde.</p>
<p>doch im augenblick ist schucht im schacht und morgen geht der 3 tag an dem ich an ein paar zeilen rumhacke und nicht einen millimeter vorwärts komme das ist frustrierend. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782389</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 18:49:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 18:59:14 GMT]]></title><description><![CDATA[<p>DerAltenburger schrieb:</p>
<blockquote>
<p>Aber die (Zeiger-) Variable ist im Stack!!!</p>
<p>Damit wird der Zeiger ungueltig UND im Heap bleibt ein LOCH!</p>
</blockquote>
<p>Und damit ist dein Problem gefunden! (Danke Altenburger für die lehrreiche Lektion.)</p>
<p>waldsee schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(int s = 0; s &lt; 8; s++)
{
ZDat1[s] = s;

}
</code></pre>
</blockquote>
<p>Leider weist du hier nicht Zahlen sondern ASCII-Codes zu und 0 bis 7 sind keine druckbaren Zeichen.</p>
<p>Probier's mal mit<br />
[cpp]for(int s = 0; s &lt; 8; s++)<br />
{<br />
ZDat1[s] = s <strong>+ 48</strong>;<br />
}<br />
[/cpp]<br />
dann siehst du auch die Zahlen.</p>
<p>Zur Lösung deines Problem musst du dein char-Feld also außerhalb der Funktion und zwar in der rufenden Funktion anlegen. D.h. du musst für deine Struct Speicher reservieren, den du dann auch mit Hilfe andere Funktionen füllen kannst. Alles klar? <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>
<p>Du schaffst das!</p>
<p>Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782393</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 18:59:14 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 19:04:24 GMT]]></title><description><![CDATA[<p>ob ich das schaffe weis ich nicht. ich werde es auf jeden fall selbst versuchen wollen. ich werde auf alle fälle bescheid geben ob es klappt oder nicht.</p>
<p>aus fehlern wird man schlau. dann hab ich noch ne menge fehler vor mir <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>
<p>danke oli und altenburger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782395</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 19:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 19:06:55 GMT]]></title><description><![CDATA[<p>Bitte auch beachten:</p>
<p>Wenn Speicher mit</p>
<pre><code class="language-cpp">new[...]
</code></pre>
<p>geholt wird, muss er auch mit</p>
<pre><code class="language-cpp">delete[]
</code></pre>
<p>gelöscht werden.</p>
<p>Gruß Nighthero</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782398</guid><dc:creator><![CDATA[Nighthero]]></dc:creator><pubDate>Thu, 05 May 2005 19:06:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 19:27:47 GMT]]></title><description><![CDATA[<p>Nochmal hierzu:</p>
<p>DerAltenburger schrieb:</p>
<blockquote>
<p>Aber die (Zeiger-) Variable ist im Stack!!!</p>
<p>Damit wird der Zeiger ungueltig UND im Heap bleibt ein LOCH!</p>
</blockquote>
<p>Habe folgenden Code erfolgreich getestet (Ausgaben als Kommentar):</p>
<pre><code class="language-cpp">void dosth(char*&amp; pt)
{
	char msg[64];
	char* ch = new char[10];
	for(int i=0; i&lt;10; ++i)
		ch[i] = i+48;
	Memo1-&gt;Lines-&gt;Add(ch);  // 0123456789
	sprintf(msg,&quot;Adresse: %p&quot;, ch); // Adresse: 008E3F9C
	Memo1-&gt;Lines-&gt;Add(msg);
	pt = ch;  // Adresse des dynamisch erstellten Speicherbereichs
	          // an übergebenen Parameter zuweisen
	sprintf(msg,&quot;Adresse: %p&quot;, pt); // Adresse: 008E3F9C
	Memo1-&gt;Lines-&gt;Add(msg);
}

void func()
{
	char msg[64];
	char* ptr = 0;
	dosth(ptr);
	Memo1-&gt;Lines-&gt;Add(ptr);  // 0123456789
	sprintf(msg,&quot;Adresse: %p&quot;, ptr); // Adresse: 008E3F9C !!!
	Memo1-&gt;Lines-&gt;Add(msg);
	delete[] ptr; // !!!!!!!!!!!!!!!!!!!
}
</code></pre>
<p>D.h. bei Übergabe einer Referenz des <em><em>char</em> ptr</em>* nimmt er die Adresse auch an. Definiere ich den Funktionskopf allerdings so:</p>
<pre><code class="language-cpp">void dosth(char* pt);
</code></pre>
<p>funktioniert es nicht. Ist der Grund die Übergabe einer Kopie?</p>
<p>Jedenfalls, waldsee, kannst du entsprechend einfach eine Referenz (keinen Zeiger) auf deine Struct übergeben und müsstest entsprechend die dynamisch erzeugten Werte zuweisen können. Das wäre ein minimaler Änderungsaufwand <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782405</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 19:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 19:45:18 GMT]]></title><description><![CDATA[<p>im augenblick versteh ich nur bahnhof, es muss irgendwo in der übergabe bei mir scheitern. ich muss aber jetzt erst mal ein wenig meinen kopf sammeln das war zuviel die letzten tage für meine rübe oder sollte ich es mal mit alohol versuchen wenn ich die leute heut gesehen habe bin ich mir sicher das ein grosser teil die heut unterwegs waren keine probleme mit einem zeiger haben <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 />
Das einzigste Zeigerproblem wird der Zeiger im Wecker sein der morgen früh bimmelt <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>waldsee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782407</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 19:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 20:41:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char* ch = new char[10];
</code></pre>
<p>was ich jetzt aber nicht ganz verstehe ist warum du in der funktion dosth nicht delete ch; brauchst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782429</guid><dc:creator><![CDATA[waldsee]]></dc:creator><pubDate>Thu, 05 May 2005 20:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem on Thu, 05 May 2005 20:52:25 GMT]]></title><description><![CDATA[<p>weil du ja sonst den dynamisch zugewiesenen speicher, der auf dem heap angelegt wird und auf den ich mit dem Zeiger ptr in func() zugreifen will, wieder freigeben würdest!!! dann würdest du wiederum mit ptr ins Leere greifen.</p>
<p>So richtig sauber ist diese Lösung allerdings nicht, da man leicht den Überblick über angelegten und freigegebenen Speicher verlieren kann...</p>
<p>gruß oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/782434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/782434</guid><dc:creator><![CDATA[der oli]]></dc:creator><pubDate>Thu, 05 May 2005 20:52:25 GMT</pubDate></item></channel></rss>