<?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[[gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern]]></title><description><![CDATA[<p>Zuerst einmal ein bisschen Code:</p>
<pre><code>//Klassen
class CFeld
{       private:        int loesung;
        public:         TEdit *Edit;
                        bool moeglichkeiten [9];
                        int block;
                        int nummer;
                        int spalte;
                        int zeile;
                        bool fertig;

        CFeld::~CFeld ();
        CFeld::CFeld(int zeileneu, int spalteneu);
        void CFeld::Ausgabe(bool selbergefunden);
        void CFeld::NeueLoesung(int neueloesung, bool selbergefunden);
        void CFeld::Einlesen();
        int CFeld::Loesungausgeben();
};//Ende Klassen

CFeld::CFeld(int zeileneu, int spalteneu)
{       loesung=0;
        for (int i=0; i&lt;9; i++)
        {       moeglichkeiten[i]=true;
        }
        fertig=false;

        [b]Edit=new TEdit (Form1);[/b]

        spalte=spalteneu;
        zeile=zeileneu;

        /*Ein paar Abfragen und Integer-Zuweisungen habe ich jetzt einmal unterschlagen (betrifft nur block, spalte, nummer und zeile)*/

        Edit-&gt;Parent=Form1;
        Edit-&gt;Visible=true;
        Edit-&gt;Enabled=true;
        Edit-&gt;Name=&quot;Feld&quot; + IntToStr(block) + IntToStr(nummer);
        Edit-&gt;Left=xver+(xfelder+5)*(spalte-1)+((block-1)%3)*blockabstand;
        Edit-&gt;Top=yver+(yfelder+5)*(zeile-1);
        if (block&gt;3) Edit-&gt;Top+=blockabstand;
        if (block&gt;6) Edit-&gt;Top+=blockabstand;
        Edit-&gt;Height=yfelder;
        Edit-&gt;Width=xfelder;
        Edit-&gt;MaxLength=1;
        Edit-&gt;Text=&quot;&quot;;
        Edit-&gt;Font-&gt;Size=14;
        Edit-&gt;Font-&gt;Color=clBlack;
}
</code></pre>
<p>Von dieser Klasse werden 9x9 Instanzen erstellt:</p>
<pre><code>CFeld *Felder [9] [9];
for (int i=0; i&lt;9; i++)
{       for (int j=0; j&lt;9; j++)
        {       Felder [i] [j]=new CFeld (i+1,j+1);
        }
}
</code></pre>
<p>Compilieren und linken ist auch kein Problem, nur beim Ausführen bekomme ich folgende Meldung:</p>
<blockquote>
<p>Im Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0158938B. Lesen von Adresse 0158938B'. ...</p>
</blockquote>
<p>Nach dieser Meldung steht das Programm bei der fett gedruckten Zeile. Das ganze passiert bereits, wenn der Konstruktor das erste Mal aufgerufen wird.</p>
<p>Eine ähnliche Fehlermeldung bekomme ich auch unter einem deutschen Vista Business (oben wars ein englisches XP Pro SP2).</p>
<p>Nachdem ich mich vorher mit den Einstellungen gespielt hatte, um StandAlone-Exes zu bekommen, habe ich den Borland C++ Builder 6 vorsichtshalber neu installiert, jedoch ohne eine Verbesserung der Lage.</p>
<p>Ich hoffe jemand kann mir meinen Fehler erklären.<br />
Herzlichen Dank schon einmal im Voraus, benediktibk</p>
<p>edit: Aufgrund eines Problems beim Registrieren und der Tatsache, dass ich dringend eine Lösung brauchte musste ich mir einen zweiten Account einrichten (heinzhans - sehr einfallsreich <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="😃"
    /> ). Das Problem (beim Registrieren) wurde jedoch gelöst durch euren freundlichen Administrator, weswegen heinzhans verschwinden wird, und statt ihm benediktibk antworten wird.<br />
Merke: benediktibk = heinzhans <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/202518/gelöst-speicher-zugriffsverletzung-beim-erzeugen-von-edit-feldern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 08:13:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202518.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Jan 2008 13:14:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 17:36:58 GMT]]></title><description><![CDATA[<p>Zuerst einmal ein bisschen Code:</p>
<pre><code>//Klassen
class CFeld
{       private:        int loesung;
        public:         TEdit *Edit;
                        bool moeglichkeiten [9];
                        int block;
                        int nummer;
                        int spalte;
                        int zeile;
                        bool fertig;

        CFeld::~CFeld ();
        CFeld::CFeld(int zeileneu, int spalteneu);
        void CFeld::Ausgabe(bool selbergefunden);
        void CFeld::NeueLoesung(int neueloesung, bool selbergefunden);
        void CFeld::Einlesen();
        int CFeld::Loesungausgeben();
};//Ende Klassen

CFeld::CFeld(int zeileneu, int spalteneu)
{       loesung=0;
        for (int i=0; i&lt;9; i++)
        {       moeglichkeiten[i]=true;
        }
        fertig=false;

        [b]Edit=new TEdit (Form1);[/b]

        spalte=spalteneu;
        zeile=zeileneu;

        /*Ein paar Abfragen und Integer-Zuweisungen habe ich jetzt einmal unterschlagen (betrifft nur block, spalte, nummer und zeile)*/

        Edit-&gt;Parent=Form1;
        Edit-&gt;Visible=true;
        Edit-&gt;Enabled=true;
        Edit-&gt;Name=&quot;Feld&quot; + IntToStr(block) + IntToStr(nummer);
        Edit-&gt;Left=xver+(xfelder+5)*(spalte-1)+((block-1)%3)*blockabstand;
        Edit-&gt;Top=yver+(yfelder+5)*(zeile-1);
        if (block&gt;3) Edit-&gt;Top+=blockabstand;
        if (block&gt;6) Edit-&gt;Top+=blockabstand;
        Edit-&gt;Height=yfelder;
        Edit-&gt;Width=xfelder;
        Edit-&gt;MaxLength=1;
        Edit-&gt;Text=&quot;&quot;;
        Edit-&gt;Font-&gt;Size=14;
        Edit-&gt;Font-&gt;Color=clBlack;
}
</code></pre>
<p>Von dieser Klasse werden 9x9 Instanzen erstellt:</p>
<pre><code>CFeld *Felder [9] [9];
for (int i=0; i&lt;9; i++)
{       for (int j=0; j&lt;9; j++)
        {       Felder [i] [j]=new CFeld (i+1,j+1);
        }
}
</code></pre>
<p>Compilieren und linken ist auch kein Problem, nur beim Ausführen bekomme ich folgende Meldung:</p>
<blockquote>
<p>Im Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0158938B. Lesen von Adresse 0158938B'. ...</p>
</blockquote>
<p>Nach dieser Meldung steht das Programm bei der fett gedruckten Zeile. Das ganze passiert bereits, wenn der Konstruktor das erste Mal aufgerufen wird.</p>
<p>Eine ähnliche Fehlermeldung bekomme ich auch unter einem deutschen Vista Business (oben wars ein englisches XP Pro SP2).</p>
<p>Nachdem ich mich vorher mit den Einstellungen gespielt hatte, um StandAlone-Exes zu bekommen, habe ich den Borland C++ Builder 6 vorsichtshalber neu installiert, jedoch ohne eine Verbesserung der Lage.</p>
<p>Ich hoffe jemand kann mir meinen Fehler erklären.<br />
Herzlichen Dank schon einmal im Voraus, benediktibk</p>
<p>edit: Aufgrund eines Problems beim Registrieren und der Tatsache, dass ich dringend eine Lösung brauchte musste ich mir einen zweiten Account einrichten (heinzhans - sehr einfallsreich <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="😃"
    /> ). Das Problem (beim Registrieren) wurde jedoch gelöst durch euren freundlichen Administrator, weswegen heinzhans verschwinden wird, und statt ihm benediktibk antworten wird.<br />
Merke: benediktibk = heinzhans <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1435370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435370</guid><dc:creator><![CDATA[heinzhans]]></dc:creator><pubDate>Sat, 12 Jan 2008 17:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 15:54:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Edit=new TEdit (Form1);
</code></pre>
<p>Form1? bitte poste noch den code, der Form1 initialisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435472</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 12 Jan 2008 15:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 16:07:29 GMT]]></title><description><![CDATA[<p>Da habe ich nichts initialisiert (Zumindest wissentlich nicht). Soll ich dir das Formular posten? Den Inhalt der Unit1.h?</p>
<pre><code>TForm1 *Form1;
</code></pre>
<p>Das ist global, direkt über der Zeile, in der ich den Zeiger auf das 9x9-Array deklariere.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435484</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Sat, 12 Jan 2008 16:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 16:16:41 GMT]]></title><description><![CDATA[<p>da liegt auch der fehler denke ich. in c++ wird bei deklaration ein zeiger mit NULL initialisiert, ich habe keine ahnung von den klassen die c++ builder benutzt.<br />
ich gehe mal davon aus, dass der konstruktor von TEdit den zeiger seiner eltern-form erwartet. ist dieser NULL versucht der konstruktor auf nicht gültigen speicher zuzugreifen.<br />
stelle sicher das Form1 initialisiert ist und auf gültigen speicher zeigt,<br />
also definitiv nicht NULL ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435490</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 12 Jan 2008 16:16:41 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 16:48:08 GMT]]></title><description><![CDATA[<p>Ich rufe die Funktion, welche den Speicher für die Felder reserviert, jetzt nicht mehr beim FormCreate auf, sondern erst bei einem Klick auf einen Button. Dem Konstruktor übergebe ich jetzt die Form1: (Änderungen sind fett)</p>
<pre><code>class CFeld
{       private:        int loesung;
                        [b]TForm1 *besitzerform;[/b]
        public:         TEdit *Edit;
                        bool moeglichkeiten [9];
                        int block;
                        int nummer;
                        int spalte;
                        int zeile;
                        bool fertig;

        CFeld::~CFeld ();
        CFeld::CFeld(int zeileneu, int spalteneu, [b]TForm1 *besitzer[/b]);
        void CFeld::Ausgabe(bool selbergefunden);
        void CFeld::NeueLoesung(int neueloesung, bool selbergefunden);
        void CFeld::Einlesen();
        int CFeld::Loesungausgeben();
};//Ende Klassen

//Memberfunktionen
CFeld::CFeld(int zeileneu, int spalteneu, [b]TForm1 *besitzer[/b])
{       zaehler++;
        loesung=0;
        for (int i=0; i&lt;9; i++)
        {       moeglichkeiten[i]=true;
        }
        fertig=false;
        [b]besitzerform=besitzer;[/b]

       [b] Edit=new TEdit (besitzerform);[/b]

        spalte=spalteneu;
        zeile=zeileneu;

        //...

        [b]Edit-&gt;Parent=besitzerform;[/b]
        Edit-&gt;Visible=true;
        Edit-&gt;Enabled=true;
        Edit-&gt;Name=&quot;Feld&quot; + IntToStr(block) + IntToStr(nummer);
        Edit-&gt;Left=xver+(xfelder+5)*(spalte-1)+((block-1)%3)*blockabstand;
        Edit-&gt;Top=yver+(yfelder+5)*(zeile-1);
        if (block&gt;3) Edit-&gt;Top+=blockabstand;
        if (block&gt;6) Edit-&gt;Top+=blockabstand;
        Edit-&gt;Height=yfelder;
        Edit-&gt;Width=xfelder;
        Edit-&gt;MaxLength=1;
        Edit-&gt;Text=&quot;&quot;;
        Edit-&gt;Font-&gt;Size=14;
        Edit-&gt;Font-&gt;Color=clBlack;
}
</code></pre>
<p>Funktioniert jetzt auch, so wie es soll.</p>
<p>Das einzige Problem, dass ich noch habe, ist, dass ich die Funktion Felderstellen gerne schon zu Beginn aufrufen würde (momentan rufe ich sie bei einem OnClick-Ereignis eines Buttons auf). Wie kann ich diese Funktion also schon zu Beginn des Programms <em>nach</em> der Initialisierung des Formulars aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435508</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Sat, 12 Jan 2008 16:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 17:01:01 GMT]]></title><description><![CDATA[<p>Edit im konstruktor von Form1 mit</p>
<pre><code>Edit = TEdit(this);
</code></pre>
<p>wäre eine möglichkeit. allerdings müsste dann Edit member von Form1 sein.<br />
du kannst allerdings memberfunktionen in Form1 implementieren, die eigenschaften<br />
von Edit verändern, wie setText oder getText.</p>
<p>oder du machst Edit in CFeld public (wie es ja schon ist) und rufst</p>
<pre><code>cfeld-&gt;Edit = TEdit(this);
</code></pre>
<p>im konstruktor von Form1 auf. wiegesagt,<br />
ich kenne die gesamtstruktur dieses programmes nicht, also was public ist und was nicht, deswegen kann ich dir da auch nichts genaueres geben <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1435514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435514</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 12 Jan 2008 17:01:01 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 17:14:15 GMT]]></title><description><![CDATA[<p>Hast du das gemeint?</p>
<pre><code class="language-cpp">Edit = new TEdit(this);
</code></pre>
<p>Und was ist this?</p>
<p>Dass Edit ein Member von Form1 ist, geht nicht wirklich, weil ich die Dinger erst zur Laufzeit erstelle, und dann halt das Attribut parent gleich Form1 setze (über Umwege).</p>
<p>Und ich schätze es heißt wieder</p>
<pre><code class="language-cpp">cfeld-&gt;Edit = TEdit(this);
</code></pre>
<p>Aber die Idee mit dem Konstruktor von Form1 gefällt mir. Es wäre dann nur noch nützlich zu wissen, wann der Speicher für die Form1 reserviert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435521</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Sat, 12 Jan 2008 17:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 17:19:04 GMT]]></title><description><![CDATA[<p>oh ja, den new operator habe ich vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
this ist ein zeiger der auf den speicher des aktuellen objektes (in dem du this aufrufst) zeigt. this im konstruktor von Form1 aufgerufen, ist das selbe wie wenn du ausserhalb von Form1 eben Form1 als zeigervariable benutzt :). deswegen kannst du Edit auch dynamisch im konstruktor von Form1 erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435523</guid><dc:creator><![CDATA[sothis_]]></dc:creator><pubDate>Sat, 12 Jan 2008 17:19:04 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Speicher Zugriffsverletzung beim Erzeugen von Edit-Feldern on Sat, 12 Jan 2008 17:34:24 GMT]]></title><description><![CDATA[<p>Danke für die umfangreiche Hilfe und einen schönen Sonntag <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>mfg benediktibk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435529</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Sat, 12 Jan 2008 17:34:24 GMT</pubDate></item></channel></rss>