<?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[CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht]]></title><description><![CDATA[<p>Hallo,<br />
um eine Datei zu schreiben benötige ich TFileStream. Um die Datei zuschreiben arbeite ich mit einem Buffer, den habe ich folgender massen definiert:</p>
<pre><code class="language-cpp">char* Buffer = new char[64];
</code></pre>
<p>wenn ich alle gewünschten Daten in der Datei versorgt habe, möchte ich den Buffer folgendermassen wieder freigeben:</p>
<pre><code class="language-cpp">delete [] Buffer;
</code></pre>
<p>doch nun kommt CodeGuard und meint:</p>
<pre><code>Bad parameter
|
|- A bad object array (0x4B4332) has been passed to the funciton
|-__org_deletea
  |
  |-TForm1::SaveNetDrv()
  |-TForm1::SaveButtonClick(const System::TObject*)
  |-0x00486A16
  |-0x00489754
  |-Controls::_16864 + 0x28
  |-0x00489754
</code></pre>
<p>was soll das?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127696/codeguard-gefällt-quot-delete-buffer-quot-nicht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 01:04:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127696.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Nov 2005 15:19:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 15:19:04 GMT]]></title><description><![CDATA[<p>Hallo,<br />
um eine Datei zu schreiben benötige ich TFileStream. Um die Datei zuschreiben arbeite ich mit einem Buffer, den habe ich folgender massen definiert:</p>
<pre><code class="language-cpp">char* Buffer = new char[64];
</code></pre>
<p>wenn ich alle gewünschten Daten in der Datei versorgt habe, möchte ich den Buffer folgendermassen wieder freigeben:</p>
<pre><code class="language-cpp">delete [] Buffer;
</code></pre>
<p>doch nun kommt CodeGuard und meint:</p>
<pre><code>Bad parameter
|
|- A bad object array (0x4B4332) has been passed to the funciton
|-__org_deletea
  |
  |-TForm1::SaveNetDrv()
  |-TForm1::SaveButtonClick(const System::TObject*)
  |-0x00486A16
  |-0x00489754
  |-Controls::_16864 + 0x28
  |-0x00489754
</code></pre>
<p>was soll das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927699</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sat, 26 Nov 2005 15:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 16:40:17 GMT]]></title><description><![CDATA[<p>Stehen die Reservierung und die Freigabe auch in einem Gültigkeitsbereich?? Meine damit, dass das delete auch noch zu einem Zeitpunkt erfolgt, wo das Array noch gültig ist.</p>
<p>Schon mal über</p>
<blockquote>
<p>SysGetMem reserviert eine bestimmte Anzahl Bytes und gibt einen Zeiger auf den Speicherbereich zurück.</p>
<p>SysFreeMem gibt einen bestimmten Speicherbereich frei.</p>
<p>SysReallocMem gibt einen Zeiger auf eine bestimmte Anzahl von Bytes unter Beibehaltung der von Pointer angegebenen Werte zurück.</p>
</blockquote>
<p>nachgedacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927756</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Sat, 26 Nov 2005 16:40:17 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 17:12:11 GMT]]></title><description><![CDATA[<p>Jup, die stehen im selben Gültigkeitsbereich. Unmittelbar nach dem ich den letzten Wert ins File geschrieben habe, versuche ich den Buffer wieder frei zu geben.<br />
Ich denke für diese Aufgabe sollte doch <strong>new</strong> und <strong>delete</strong> ausreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927787</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sat, 26 Nov 2005 17:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 18:22:10 GMT]]></title><description><![CDATA[<p>Zeig doch mal den kompletten Code-Teil, damit wir uns ein besseres Bild von dem Problem machen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927872</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Sat, 26 Nov 2005 18:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 19:01:48 GMT]]></title><description><![CDATA[<p>Ok, hier ist der gesamt Code:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
// saves the net drives
//---------------------------------------------------------------------------
void Main::SaveNetDrv()
{
   AnsiString Version = &quot;1.1&quot;;
   AnsiString FileName =  ExtractFilePath(Application-&gt;ExeName)+
                          &quot;lans.wdi&quot;;
   char BufferSize = 64;
   char* Buffer = new char[BufferSize];
   int Int;
   int* pInt;
   pInt = &amp;Int;
   int StringSize;
   TFileStream* File;
   int LANCount;
   int ServerCount;
   int NetDriveCount;

 //open file to overwrite
   if(FileExists(FileName))                            //delete file, if it exists
      DeleteFile(FileName);
   else;
   File = new TFileStream(FileName,fmCreate);          //create file

 //write header (application name with version)
   StrCopy(Buffer,&quot;--::WediNetConnector::--[v:&quot;);
   File-&gt;Write(Buffer,27);
   StringSize = Version.Length();
   File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
   File-&gt;Write(Version.c_str(),StringSize);
   StrCopy(Buffer,&quot;]&quot;);
   File-&gt;Write(Buffer,1);

 //write LANs
   StrCopy(Buffer,&quot;-{LANs:&quot;);                          //write begin of LANs
   File-&gt;WriteBuffer(Buffer,7);
   LANCount = LANs.Length;                             //get number of LANs
   File-&gt;WriteBuffer(&amp;LANCount,sizeof(LANCount));      //write number of LANs
   for(int i=0;i&lt;LANCount;i++)                         //write LANs
   {
      *pInt = LANs[i]-&gt;LANID;                          //write LAN ID
      File-&gt;WriteBuffer(pInt,sizeof(Int));
      StringSize = LANs[i]-&gt;NameEdit-&gt;Text.Length();   //write LAN name
      File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
      File-&gt;WriteBuffer(LANs[i]-&gt;NameEdit-&gt;Text.c_str(),
                        StringSize);
      *pInt = LANs[i]-&gt;GatewayEdit-&gt;Items-&gt;Count;
      File-&gt;WriteBuffer(pInt,sizeof(Int));
      for(int j=0;j&lt;LANs[i]-&gt;GatewayEdit-&gt;Items-&gt;Count;j++)  //write gateway
      {
         StringSize = LANs[i]-&gt;GatewayEdit-&gt;Items-&gt;
                                       Strings[j].Length();
         File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
         File-&gt;WriteBuffer(LANs[i]-&gt;GatewayEdit-&gt;Items-&gt;
                           Strings[j].c_str(),StringSize);
      }
   }
   StrCopy(Buffer,&quot;:LANs}-&quot;);                           //write end of LANs
   File-&gt;WriteBuffer(Buffer,7);

  //write Servers
   StrCopy(Buffer,&quot;-{Servers:&quot;);                        //write begin of Servers
   File-&gt;WriteBuffer(Buffer,10);
   ServerCount = 0;                                     //write number of Servers
   for(int i=0;i&lt;LANs.Length;i++)
      ServerCount += LANs[i]-&gt;Servers.Length;
   File-&gt;WriteBuffer(&amp;ServerCount,sizeof(ServerCount));
   for(int i=0;i&lt;LANs.Length;i++)
   {
      for(int j=0;j&lt;LANs[i]-&gt;Servers.Length;j++)
      {
         *pInt = i;                                     //write LAN ID
         File-&gt;WriteBuffer(pInt,sizeof(Int));
         *pInt = j;                                     //write Server ID
         File-&gt;WriteBuffer(pInt,sizeof(Int));
         StringSize = LANs[i]-&gt;Servers[j]-&gt;NameEdit-&gt;   //write name
                      Text.Length();
         File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
         File-&gt;WriteBuffer(LANs[i]-&gt;Servers[j]-&gt;
                   NameEdit-&gt;Text.c_str(),StringSize);
         StringSize = LANs[i]-&gt;Servers[j]-&gt;UserEdit-&gt;   //write username
                      Text.Length();
         File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
         File-&gt;WriteBuffer(LANs[i]-&gt;Servers[j]-&gt;
                 UserEdit-&gt;Text.c_str(),StringSize);
         StringSize = LANs[i]-&gt;Servers[j]-&gt;             //write password
                                   Password.Length();
         File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
         File-&gt;WriteBuffer(LANs[i]-&gt;Servers[j]-&gt;
                       Password.c_str(),StringSize);
      }
   }
   StrCopy(Buffer,&quot;:Servers}-&quot;);
   File-&gt;WriteBuffer(Buffer,10);                        //write end of Servers

 //write net drives
   StrCopy(Buffer,&quot;-{NetDrives:&quot;);                      //write begin of net drives
   File-&gt;WriteBuffer(Buffer,12);
   NetDriveCount = NetDrives.Length;
   File-&gt;WriteBuffer(&amp;NetDriveCount,                    //write number of net drives
                     sizeof(NetDriveCount));
   for(int i=0;i&lt;NetDriveCount;i++)
   {
      *pInt = NetDrives[i]-&gt;LANID;                      //write LAN ID
      File-&gt;WriteBuffer(pInt,sizeof(Int));
      *pInt = NetDrives[i]-&gt;ServerID;                   //write Server ID
      File-&gt;WriteBuffer(pInt,sizeof(Int));
      *pInt = NetDrives[i]-&gt;NetDriveID;                 //write net drive ID
      File-&gt;WriteBuffer(pInt,sizeof(Int));
      StringSize = NetDrives[i]-&gt;NetDrive.Length();     //write net drive name
      File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
      File-&gt;WriteBuffer(NetDrives[i]-&gt;NetDrive.c_str(),
                        StringSize);
      StringSize = NetDrives[i]-&gt;LocalDrive.Length();   //write local drive
      File-&gt;WriteBuffer(&amp;StringSize,sizeof(StringSize));
      File-&gt;WriteBuffer(NetDrives[i]-&gt;LocalDrive.c_str(),
                        StringSize);
      *Buffer = NetDrives[i]-&gt;Connect ? '1':'0';             //write allowed to connect
      File-&gt;WriteBuffer(Buffer,1);

   }
   StrCopy(Buffer,&quot;:NetDrives}-&quot;);                           //write end of net drives
   File-&gt;WriteBuffer(Buffer,12);
   delete File;
   File = NULL;
   delete [] Buffer;
   Buffer = NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/927926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927926</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sat, 26 Nov 2005 19:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 19:04:56 GMT]]></title><description><![CDATA[<p>Ich bin langsam der Meinung, dass Codeguard manchmal etwas überempfindlich ist. Hatte letztens auch eine Schleife mit TIniFile wo CodeGuard was zu meckern hatte. Kaum hab ich die Schelfe ausgeschrieben hatte CodeGuard nichts mehr auszusetzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927929</guid><dc:creator><![CDATA[Phips!]]></dc:creator><pubDate>Sat, 26 Nov 2005 19:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 19:09:21 GMT]]></title><description><![CDATA[<p>Muss BufferSize vom Typ char sein? Ich dachte immer, das sollte int sein... Weiß aber nicht ob das stimmt, hat mich nur gewundert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/927935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/927935</guid><dc:creator><![CDATA[Phips!]]></dc:creator><pubDate>Sat, 26 Nov 2005 19:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sat, 26 Nov 2005 20:43:08 GMT]]></title><description><![CDATA[<p>Die Funktion ist in meinen Augen eine einzige Katastrophe.</p>
<p>- Sämtliche mit &quot;// write begin ...&quot; kommentierten Zeilen kannst du auch als Konstanten anlegen, dann hast du deren Initialisierung nur ein einziges Mal in der Initialisierungliste des Kontruktors.<br />
- BufferSize sollte vom Typ int sein.<br />
- Da du die Versionsnummer sowieso fest im Code angibst, warum nicht gleich &quot;--::WediNetConnector::--[v:1.1]&quot;? Dann sparst du dir am Anfang direkt ein paar Zeilen unnötigen Code.<br />
- Worfür pInt? Weg damit.<br />
- Warum unbedingt char* bzw. char[]? Du nutzt an anderen Stellen auch AnsiString::c_str(), also kannst du das generell in der Funktion nutzen. Das spart dann auch noch jede Menge StrCopy-Aufrufe und macht den Code wieder etwas schöner, lesbarer, wartbar etc.</p>
<p>Um jetzt nur mal ein Beispeil zu geben, wie man es machen könnte:</p>
<pre><code class="language-cpp">// Header steht im private-Bereich von Main.h als const AnsiString Header
Main::Main(...)
  :Header(&quot;--::WediNetConnector::--[v:1.1]&quot;) 
{

}

void Main::SaveNetDrv()
{
   AnsiString FileName =  ExtractFilePath(Application-&gt;ExeName)+
                          &quot;lans.wdi&quot;;
   char BufferSize = 64;
   int Int;
   int StringSize;
   TFileStream* File;
   int LANCount;
   int ServerCount;
   int NetDriveCount;

 //open file to overwrite
   if(FileExists(FileName))                            //delete file, if it exists
      DeleteFile(FileName);
   else;
   File = new TFileStream(FileName,fmCreate);          //create file

 //write header (application name with version)
   File-&gt;Write(Header.c_str(), Header.Length()); // Man siehe, eine Zeile wo vorher 7 Zeilen standen.

... // usw.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/928000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/928000</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Sat, 26 Nov 2005 20:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sun, 27 Nov 2005 10:43:59 GMT]]></title><description><![CDATA[<p>Jo okay, mit den Konstanten hast recht, werd ich noch änderen.<br />
Weshalb ich Buffersize vom Typ char genommen habe kann ich dir auch nicht sagen, mir ist eigentlich schon klar, dass das int sein sollte. Hab mich da irgendwie vertippt.</p>
<p>Kann es sein, dass CodeGuard noch einige Bugs hat? Als ich heute den Code nochmals neu kompiliert habe, hatte CodeGuard nichts mehr zu meckern und das ohne eine Änderung. Gestern habe ich auch x-mal neu kompiliert, doch da hat das nichts genützt.<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>
]]></description><link>https://www.c-plusplus.net/forum/post/928177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/928177</guid><dc:creator><![CDATA[wedmer]]></dc:creator><pubDate>Sun, 27 Nov 2005 10:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to CodeGuard gefällt &amp;quot;delete [] Buffer&amp;quot; nicht on Sun, 27 Nov 2005 10:51:18 GMT]]></title><description><![CDATA[<p>Ich trau dem Ding nicht besonders weit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/928183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/928183</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Sun, 27 Nov 2005 10:51:18 GMT</pubDate></item></channel></rss>