<?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[String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt]]></title><description><![CDATA[<p>Hi,</p>
<p>ich benutzte ein StringGrid und Speichere zu jeder Zeile Informationen in einer Strucktur, die ich an den Objektzeiger anhäge. Zu jeder Zeile ist diese Strucktur auf jeden Fall gesetzt und der Zeiger existiert.</p>
<p>Nun habe ich folgendes Problem. Bei der Zuweisung bekomme ich manchmal einen NULL Pointer zurück, so das bei der nächsten Verwendung eine Exeption ausgelöst wird.</p>
<p>Ich habe mal versucht das zu debuggen und zwei asserts eingefügt und festgestellt das nur das zweite assert gelegentlich auftritt.</p>
<p>Weiß jemand Rat?</p>
<pre><code class="language-cpp">tStringGridObjectEntry *StringGridObjectEntry;

assert(SG-&gt;Objects[0][j]);
StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j];
assert(StringGridObjectEntry);
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/207849/string-grid-objekt-gibt-null-zurück-obwohl-zeiger-gesetzt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 14:40:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/207849.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Mar 2008 11:51:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 11:51:58 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich benutzte ein StringGrid und Speichere zu jeder Zeile Informationen in einer Strucktur, die ich an den Objektzeiger anhäge. Zu jeder Zeile ist diese Strucktur auf jeden Fall gesetzt und der Zeiger existiert.</p>
<p>Nun habe ich folgendes Problem. Bei der Zuweisung bekomme ich manchmal einen NULL Pointer zurück, so das bei der nächsten Verwendung eine Exeption ausgelöst wird.</p>
<p>Ich habe mal versucht das zu debuggen und zwei asserts eingefügt und festgestellt das nur das zweite assert gelegentlich auftritt.</p>
<p>Weiß jemand Rat?</p>
<pre><code class="language-cpp">tStringGridObjectEntry *StringGridObjectEntry;

assert(SG-&gt;Objects[0][j]);
StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j];
assert(StringGridObjectEntry);
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472717</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Wed, 12 Mar 2008 11:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 11:55:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Hast du zwischendurch mal die Zeilen- oder Spaltenanzahl des StringGrids geändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472720</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Mar 2008 11:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 12:06:28 GMT]]></title><description><![CDATA[<p>klar wird die Zeilenanzahl immer mal geändert aber sobald ich dies mache passe ich auch die Pointer an oder lösche die Struktur beim entfernen von Zeilen.</p>
<p>Ich weiß jetzt nicht worauf du hinaus willst.</p>
<p>Die Anweisungen von oben mache ich in einer for Schleife um eine bestimmte Zeile zu finden.</p>
<pre><code class="language-cpp">for (j=1; ((j&lt;SG-&gt;RowCount) &amp;&amp; (!bFound)); j++)
{
  assert(SG-&gt;Objects[0][j]);
  StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j];

  assert(StringGridObjectEntry);
  ...
}
</code></pre>
<p>wenn ich das mit einer do while schleife mache geht es. Da es halt nur manchmal auftritt.</p>
<pre><code class="language-cpp">for (j=1; ((j&lt;SG-&gt;RowCount) &amp;&amp; (!bFound)); j++)
{
  assert(SG-&gt;Objects[0][j]);
  do
  {
    StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j];
  } while(!StringGridObjectEntry);
  assert(StringGridObjectEntry);
  ...
}
</code></pre>
<p>Woran liegt das?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472732</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Wed, 12 Mar 2008 12:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 12:10:26 GMT]]></title><description><![CDATA[<p>Das kann ich jetzt so nicht sagen. Ein derartiger Fehler deutet eigentlich auf einen vorher zerschossenen Heap hin. Evtl. hast du irgendwo vorher mal in ungültigen Speicher geschrieben. Aus dem vorliegenden Code kann man das so nicht ersehen.<br />
Ich habe Objects auch schon recht häufig verwendet und solch einen fehler nie gehabt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472740</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Mar 2008 12:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 12:27:35 GMT]]></title><description><![CDATA[<p>wie bekomme ich sowas raus?</p>
<p>bei der do while schleife bekommt er dann aber auch den Zeiger mit den richtigen Daten.</p>
<p>einfügen mache ich so:</p>
<pre><code class="language-cpp">SG-&gt;RowCount++;
StringGridObjectEntry = new tStringGridObjectEntry;
if (StringGridObjectEntry)
{
... // Strucktur füllen
SG-&gt;Objects[0][SG-&gt;RowCount-1] = (TObject *) StringGridObjectEntry;
}
</code></pre>
<p>und löschen so:</p>
<pre><code class="language-cpp">EnterCriticalSection(&amp;CSSG);
for (i=1; i&lt;SG-&gt;RowCount; i++)
{
   if (SG-&gt;Objects[0][i]) delete ((tStringGridObjectEntry *) SG-&gt;Objects[0][i]);
   SG-&gt;Rows[i]-&gt;Clear();
}
LeaveCriticalSection(&amp;CSSG);
</code></pre>
<p>Achso diese Critical section benutze ich auch beim einfügen oder ändern der Daten.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472758</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Wed, 12 Mar 2008 12:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 12 Mar 2008 12:35:54 GMT]]></title><description><![CDATA[<p>Versuche so viel Quelltext auszukommentieren wie möglich um so den Fehler einzugrenzen. Wenn du eine Variante hast die problemlos funktioniert, kommentiere Schritt für schritt wiede rein.<br />
Bei deinem Code sind zwei if-Abfragen unnötig</p>
<pre><code class="language-cpp">StringGridObjectEntry = new tStringGridObjectEntry;
if (StringGridObjectEntry)
</code></pre>
<p>new wirft eine exception wenn kein Speicher angefordert werden kann und gibt nicht 0 zurück.</p>
<pre><code class="language-cpp">if (SG-&gt;Objects[0][i]) delete ((tStringGridObjectEntry *) SG-&gt;Objects[0][i]);
</code></pre>
<p>Das if(... ist hier überflüssig, da ein delete auf einen Nullzeiger gültig ist. Dann wird einfach gar nichts gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1472772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1472772</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Mar 2008 12:35:54 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Tue, 01 Apr 2008 08:50:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muß das jetzt nochmal aufwärmen.</p>
<p>Wenn ich das mit dieser do while Schleife mache hat er bei zweiten Anlauf immer den richtigen Pointer woran könnte dies liegen?</p>
<p>Durch auskommentieren habe ich keine neuen Erkenntnisse bekommen.</p>
<pre><code class="language-cpp">do 
  { 
    StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j]; 
  } while(!StringGridObjectEntry);
</code></pre>
<p>aber das ist doch keine saubere Lösung finde ich.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484236</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Tue, 01 Apr 2008 08:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Tue, 01 Apr 2008 16:25:15 GMT]]></title><description><![CDATA[<p>Arbeitest du mit verschiedenen Threads (ich frage wegen CriticalSection)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484639</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 01 Apr 2008 16:25:15 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 02 Apr 2008 06:30:39 GMT]]></title><description><![CDATA[<p>ja ich arbeite mit mehreren Threads und benutze aber auch eine CriticalSection.</p>
<p>nut beim Zeichnen frage ich die Critical Section nicht ab da es dort ja nur lesende Zugriffe sind.</p>
<p>aber an der Stelle wo dieses Problem auftritt benutze ich die Critical Section.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1484949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1484949</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Wed, 02 Apr 2008 06:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Wed, 02 Apr 2008 16:27:34 GMT]]></title><description><![CDATA[<p>Arbeitest du denn mit demselben CriticalObjekt beim Schreiben und beim Lesen?<br />
Evtl. könntest du auch mal die VCL-Variante &quot;TCriticalSection&quot; ausprobieren.</p>
<p>Ansonsten zeig doch mal beide Code-Auschnitte mit den Critical Sections.</p>
<p>P.S: Hast du denn auch InitializeCriticalSection() vorher einmalig aufgerufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485359</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 02 Apr 2008 16:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to String Grid objekt gibt NULL zurück obwohl Zeiger gesetzt on Thu, 03 Apr 2008 06:31:56 GMT]]></title><description><![CDATA[<p>also ich habe nur eine Critical Section, die das Schreiben oder halt Verändern des String Grid sperrt.</p>
<p>In meiner Zeichnen Funktion (</p>
<pre><code class="language-cpp">SGDrawCell
</code></pre>
<p>), benutze ich keine Critical Section, da dort nur lesend auf das String Grid zugegriffen wird (Dort ist der Fehler ja auch nicht).</p>
<p>Der Fehler tritt auf beim Durchsuchen des String GRids nach einer bestimmten Zeile.</p>
<pre><code class="language-cpp">EnterCriticalSection(&amp;CSForSG);

for (j=1; ((j&lt;SG-&gt;RowCount) &amp;&amp; (!bFound)); j++)
{
  assert(SG-&gt;Objects[0][j]);
  StringGridObjectEntry = (tStringGridObjectEntry *) SG-&gt;Objects[0][j];

  assert(StringGridObjectEntry);
  ...
} 

LeaveCriticalSection(&amp;CSForSG);
</code></pre>
<p>wenn ein assert kommt dann nur das zweite. Warum die Zuweisung des Pointers nicht funktioniert weiß ich nicht?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485604</guid><dc:creator><![CDATA[Destiniy]]></dc:creator><pubDate>Thu, 03 Apr 2008 06:31:56 GMT</pubDate></item></channel></rss>