<?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[Speicher allokieren]]></title><description><![CDATA[<p>Hallo zusammen, ich verzweifle seit ein paar Stunden daran dass ich es nicht schaffe ein string Array zu machen dass dynamisch initialisiert wird. (glaube ich).<br />
Wenn ich Begriffe durcheinander werfe dann bitte darauf hinweisen <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>Ich versuche ein Programm für Diskrete Mathematik zu implementieren.<br />
Dazu muss ich erstmal Beginnen aus einer Datei eine Adjazenzliste zu lesen. Das hab ich mit Filestream gemacht.<br />
Jetzt stellt sich das Problem dass ich gerne die Adjazenzliste in ein Stringarray schreiben will. Das muss dann aber als Größe die Anzahl der Kanten haben.</p>
<p>Also Problem:<br />
Ich muss einen Speicher für ein Array aus n strings deklarieren.</p>
<pre><code>string *graph = new string[n];
</code></pre>
<p>Aber wenn ich mein Programm ausführe dann bekomme ich einen Fehler<br />
&quot;Zugriffsverletzung beim Schreiben an Position 0xabababab&quot;</p>
<p>Die Funktion</p>
<pre><code>Laenge(Dateiname)
</code></pre>
<p>ist mein &quot;n&quot;</p>
<p>Falls es notwendig ist, dann ist hier noch der kritische Bereich meines Programms. (ich denke mal dass es vorerst hier scheitert)</p>
<pre><code>int main()
{
	int Kanten;
	int i=0;
	string Dateiname;
	ifstream f;
	Dateiname = &quot;boris.txt&quot;;
	string *graph = new string[Laenge(Dateiname)];

	f.open(Dateiname);
	for(i=0;!f.eof();i++)
    {
		f&gt;&gt;graph[i];
		cout&lt;&lt;graph[i]&lt;&lt;endl;
	}

	cout&lt;&lt;graph[3];

	f.close();

	delete graph;
	getch();
	return 0;
}
</code></pre>
<p>für Hilfe wäre ich sehr dankbar.<br />
Das Programm muss ich in 3 Wochen fertig haben, also hab ich noch länger an der Aufgabe interesse.</p>
<p>Sunflower <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/294940/speicher-allokieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 15:47:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294940.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Nov 2011 01:20:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 01:20:51 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich verzweifle seit ein paar Stunden daran dass ich es nicht schaffe ein string Array zu machen dass dynamisch initialisiert wird. (glaube ich).<br />
Wenn ich Begriffe durcheinander werfe dann bitte darauf hinweisen <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>Ich versuche ein Programm für Diskrete Mathematik zu implementieren.<br />
Dazu muss ich erstmal Beginnen aus einer Datei eine Adjazenzliste zu lesen. Das hab ich mit Filestream gemacht.<br />
Jetzt stellt sich das Problem dass ich gerne die Adjazenzliste in ein Stringarray schreiben will. Das muss dann aber als Größe die Anzahl der Kanten haben.</p>
<p>Also Problem:<br />
Ich muss einen Speicher für ein Array aus n strings deklarieren.</p>
<pre><code>string *graph = new string[n];
</code></pre>
<p>Aber wenn ich mein Programm ausführe dann bekomme ich einen Fehler<br />
&quot;Zugriffsverletzung beim Schreiben an Position 0xabababab&quot;</p>
<p>Die Funktion</p>
<pre><code>Laenge(Dateiname)
</code></pre>
<p>ist mein &quot;n&quot;</p>
<p>Falls es notwendig ist, dann ist hier noch der kritische Bereich meines Programms. (ich denke mal dass es vorerst hier scheitert)</p>
<pre><code>int main()
{
	int Kanten;
	int i=0;
	string Dateiname;
	ifstream f;
	Dateiname = &quot;boris.txt&quot;;
	string *graph = new string[Laenge(Dateiname)];

	f.open(Dateiname);
	for(i=0;!f.eof();i++)
    {
		f&gt;&gt;graph[i];
		cout&lt;&lt;graph[i]&lt;&lt;endl;
	}

	cout&lt;&lt;graph[3];

	f.close();

	delete graph;
	getch();
	return 0;
}
</code></pre>
<p>für Hilfe wäre ich sehr dankbar.<br />
Das Programm muss ich in 3 Wochen fertig haben, also hab ich noch länger an der Aufgabe interesse.</p>
<p>Sunflower <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/2140096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140096</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 04 Nov 2011 01:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 01:32:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main()
{
  const std::string filename = &quot;boris.txt&quot;;
  std::vector&lt;std::string&gt; graph; // Ein Vektor erspart das new und vor allem das delete.
  std::ifstream file(filename); //Wir öffnen im Konstruktor. // Ohne C++11 filename.c_str()
  std::string buffer;
  while (file &gt;&gt; buffer) // std::ifstream hat operator void* überladen und operator &gt;&gt; gibt std::ifstream&amp; zurück, daher quasi &quot;lies bis zum Ende&quot;.
  {
    graph.push_back(buffer);
    std::cout &lt;&lt; graph.back();
  }
} // RAII schließt die Datei für uns im Destruktor, der Speicher wird für alle Container (string, vector) freigegeben.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2140097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140097</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 04 Nov 2011 01:32:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 01:44:54 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Jetzt stellt sich das Problem dass ich gerne die Adjazenzliste in ein Stringarray schreiben will.</p>
</blockquote>
<p>Wieso genau willst du das mit Strings machen? Wäre da ein std::vector&lt;int&gt; nicht viel besser geeignet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140099</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 04 Nov 2011 01:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 09:13:33 GMT]]></title><description><![CDATA[<p>Ein paar Tipps zum Code:</p>
<p>- Vermeide das separate Definieren und Initialisieren von Variablen. Definiere sie erst dann, wenn Du sie wirklich brauchst und nicht komplett am Anfang. So'was muss man nur in C90 machen. In C++ ist das noch unpraktischer.</p>
<p>- Verwendest Du new[], musst Du auch delete[] benutzen. Viel schmerzfreier ist allerdings der Einsatz von std::vector<a href="std::string" rel="nofollow">std::string</a> in Deinem Fall. Nutze die Standardcontainer. Lerne, RAII zu schätzen. Der Grundgedanke hinter RAII ist, die Verwaltung einer Resource (wie z.B. Speicher) an ein Objekt zu binden. Das macht vieles einfacher. Wenn Du die Möglichkeiten zur Resourcenverwaltung effektiv nutzen möchtest, sorgst Du dafür, dass alle Resourcen (Objekte im Freispeicher, geöffnete Dateien, etc) von anderen Objekten verwaltet werden. Man spricht hier auch von &quot;Besitz&quot;. Diese anderen Objekte leben dann entweder im statischen bzw automatischen Speicher (Der Speicher wird automatisch verwaltet) oder sie leben auch im Freispeicher, werden aber wiederrum von anderen Objekten verwaltet. Man kann sich diese &quot;Besitzverhältnisse&quot; als gerichteten azyklischen Graphen (oft auch Bäume) vorstellen, wobei alle Wurzeln im statischen bzw automatischen Speicher liegen. Wenn Du beim Design schon darauf achtest und Dir klar macht, welche Resource von welchem Objekt verwaltet wird, dann sparst Du Dir damit sehr viele Speicher- und Resourcelecks. So ein Ansatz funktioniert auch wunderbar mit der Ausnahmebehandlung zusammen.</p>
<p>- eof() mag false zurückgeben, <em>obwohl</em> man schon am Ende angekommen ist. eof() liefert erst dann true zurück, falls ein vorheriger Leseversuch aufgrund des Dateiendes gescheitert ist. Das Idiom ist hier</p>
<pre><code class="language-cpp">while (filestream &gt;&gt; something) {
  // Lesen war erfolgreich
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2140132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140132</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 04 Nov 2011 09:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 09:10:34 GMT]]></title><description><![CDATA[<p>Das ist ja toll. Ich habe gerade erst von std::vector erfahren.<br />
Was mir wikipedia und einige andere Seiten erzählt haben hab ich verstanden.</p>
<p>Jetzt habe ich die vector bibliothek included und so wie es unten als Beispiel geht, funktioniert es.<br />
Aber dann noch ein paar Fragen</p>
<p>Was macht das &quot;file&quot; in &quot;</p>
<pre><code>ifstream file(filename)
</code></pre>
<p>&quot;<br />
und was macht dieser Operator &quot;&gt;&gt;&quot; in &quot;</p>
<pre><code>while (file &gt;&gt; buffer)
</code></pre>
<p>&quot;?</p>
<p>Kann ich die Elemente im Vector jetzt wie die eines gewöhnlichen Arrays behandeln?<br />
Oder brauche ich besondere Methoden (ich glaube sie heißen so)?</p>
<p>Danke soweit <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="🙂"
    /><br />
Das war sehr hilfreich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140137</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 04 Nov 2011 09:10:34 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 09:15:04 GMT]]></title><description><![CDATA[<p>Mit &quot;toll&quot; meinte ich das nicht ironisch <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="😉"
    /><br />
Ich freue mich, denn endlich habe ich das Problem mit dem Speicher endlich gelöst. Ständig musste ich Programme schreiben ohne zu wissen was für einen Speicher ich dafür reservieren musste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140140</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 04 Nov 2011 09:15:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 09:34:48 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Was macht das &quot;file&quot; in &quot;</p>
<pre><code>ifstream file(filename)
</code></pre>
<p>&quot;</p>
</blockquote>
<p>Das ist der Name des ifstream-Objekts, welches Du anlegst. Es wird auch gleich direkt initialisiert mit dem Parameter filename.</p>
<pre><code class="language-cpp">string foo (&quot;123&quot;); // direct initialization
string bar = &quot;123&quot;; // copy initialization
string baz;         // default initialization (glaub'ich)
baz = &quot;123&quot;;        // assignment
</code></pre>
<p>&quot;direct&quot; ist jetzt aber nicht unbedingt effizienter als &quot;copy&quot;. Die heißen nur so. Bei der copy-Initialisierung kommen allerdings nur Konstruktoren in Frage, die <em>nicht</em> mit <code>explicit</code> gekennzeichnet sind und nur mit einem Parameter aufrufbar sind. Dazu muss auch der Kopierkonstruktor verfügbar sein; dessen Aufruf aber typischerweise wegoptimiert wird. (Verfügbar muss der trotzdem sein). Die &quot;copy initialization&quot; ist auch die Art von Initialisierung, die für Funktionsparameter und dem Rückgabewert verwendet wird.</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>und was macht dieser Operator &quot;&gt;&gt;&quot; in &quot;</p>
<pre><code>while (file &gt;&gt; buffer)
</code></pre>
<p>&quot;?</p>
</blockquote>
<p>Das guckst Du am besten selbst mal nach. Ich hoffe, Du hast Dir ein gutes, schlaues C++ Buch besorgt.</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>Kann ich die Elemente im Vector jetzt wie die eines gewöhnlichen Arrays behandeln?</p>
</blockquote>
<p>Die Frage ist viel zu allgemein. Man könnte eine ganze Seite zu std::vector&lt;&gt; schreiben. Der Index-Operator funktioniert jedenfalls. Der Index muss aber zwischen 0 (einschließlich) und size() (ausschließlich) liegen. Der Indexoperator vergrößert den Vektor nicht auf magische Art und Weise.</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>Oder brauche ich besondere Methoden (ich glaube sie heißen so)?</p>
</blockquote>
<p>Schau doch mal im schlauen C++ Buch rein oder auf irgendeiner C++-StdLib-Referenzseite nach, was std::vector&lt;&gt; zu bieten hat.</p>
<p>Bissel mehr Eigeninitiative bitte.<br />
Danke.</p>
<p>P.S.: Es heißt &quot;Speicher allo<strong>z</strong>ieren&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140143</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 04 Nov 2011 09:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 16:37:59 GMT]]></title><description><![CDATA[<p>Vielen Dank schonmal,<br />
ich habe mich in ein paar Sachen eingearbeitet. Leider fehlt mir die Zeit um all meine Neugier zu befriedigen, da ich noch anderes zu lernen habe als Programmieren <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>Leider konnte ich mein Wissen bisher nur aus Internetrecherchen ziehen, da ich kein Buch besitzte.<br />
Jetzt steuere ich immer mehr auf diskrete Mathematik zu und komme wahrscheinlich nicht drum herum mir ein Buch zu kaufen.</p>
<p>Ich habe ein gutes Angebot günstig das Buch Visual c++ .net Ent-packt von Chris H. Pappas, William H. Murray von einem Freund zu bekommen, aber ich weiß nicht ob das Buch wirklich gut ist.<br />
Kann jemand ein günstiges Buch empfehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140305</guid><dc:creator><![CDATA[Sunflower]]></dc:creator><pubDate>Fri, 04 Nov 2011 16:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 17:09:09 GMT]]></title><description><![CDATA[<p>Sunflower schrieb:</p>
<blockquote>
<p>Leider fehlt mir die Zeit um all meine Neugier zu befriedigen, da ich noch anderes zu lernen habe als Programmieren <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>Leider konnte ich mein Wissen bisher nur aus Internetrecherchen ziehen, da ich kein Buch besitzte.</p>
</blockquote>
<p>&quot;Keine Zeit&quot; ist zumindest auf langer Sicht ein Argument <em>für</em> ein schlaues, <em>gutes</em> Buch. Damit kannst Du Dir nämlich 'ne Menge Ärger ersparen.</p>
<p>Sunflower schrieb:</p>
<blockquote>
<p>Ich habe ein gutes Angebot günstig das Buch Visual c++ .net Ent-packt von Chris H. Pappas, William H. Murray von einem Freund zu bekommen, aber ich weiß nicht ob das Buch wirklich gut ist.</p>
</blockquote>
<p>Ich auch nicht. Ich kann Dir aber &quot;Accelerated C++&quot; empfehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140325</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 04 Nov 2011 17:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher allokieren on Fri, 04 Nov 2011 17:09:56 GMT]]></title><description><![CDATA[<p>Visual <a href="http://C++.NET" rel="nofollow">C++.NET</a> klingt nach C++/CLI. Das ist NICHT C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140326</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 04 Nov 2011 17:09:56 GMT</pubDate></item></channel></rss>