<?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[Unklarere Segmentation Fault]]></title><description><![CDATA[<p>Ich habe folgende Methode geschrieben:</p>
<pre><code class="language-cpp">void CandidatesTable::toString() {

	struct tm *tminfo;
	time_t now = time(0);
	cout &lt;&lt; now &lt;&lt; endl;
	tminfo = localtime( &amp;now );
	cout &lt;&lt; endl &lt;&lt; &quot;Aktuelle Kandidaten von &quot; &lt;&lt; asctime( tminfo );
	cout &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;
	for( int i = 0; i &lt; length; ++i ) {
		time_t t_ = t[i];
		tminfo = localtime( &amp;t_ );
		cout &lt;&lt; (i+1) &lt;&lt; &quot;.\t&quot; &lt;&lt; names[i] &lt;&lt; &quot;\t\t&quot; &lt;&lt; llrs[i] &lt;&lt; &quot;\t&quot; &lt;&lt; tminfo-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_sec &lt;&lt; &quot;h&quot; &lt;&lt; endl;
	}
	cout &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;

}
</code></pre>
<p>Wenn mein Programm diese Methode aufruft, dann erhalte ich folgenden Fehler (gdb Ausgabe):</p>
<blockquote>
<p>1279117548</p>
<p>Program received signal EXC_BAD_ACCESS, Could not access memory.<br />
Reason: KERN_INVALID_ADDRESS at address: 0x48be8732<br />
0x92dbae9e in __findenv ()<br />
(gdb) up<br />
#1 0x92dbae06 in getenv ()<br />
(gdb) up<br />
#2 0x92df05d4 in _st_tzset_basic ()<br />
(gdb) up<br />
#3 0x92df058c in localtime ()<br />
(gdb) up<br />
#4 0x00006568 in CandidatesTable::toString (this=0xbffff190) at CandidatesTable.cpp:144<br />
144 tminfo = localtime( &amp;now );<br />
(gdb)</p>
</blockquote>
<p>Interessanterweise habe ich diese Methode auch in meinen Unit-Tests verwendet und da läuft es einfach durch ohne zu meckern.</p>
<p>Was ist denn hier jetzt los? Ich versteh das überhaupt nicht. <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/topic/270564/unklarere-segmentation-fault</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 02:25:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270564.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jul 2010 14:29:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unklarere Segmentation Fault on Wed, 14 Jul 2010 14:29:30 GMT]]></title><description><![CDATA[<p>Ich habe folgende Methode geschrieben:</p>
<pre><code class="language-cpp">void CandidatesTable::toString() {

	struct tm *tminfo;
	time_t now = time(0);
	cout &lt;&lt; now &lt;&lt; endl;
	tminfo = localtime( &amp;now );
	cout &lt;&lt; endl &lt;&lt; &quot;Aktuelle Kandidaten von &quot; &lt;&lt; asctime( tminfo );
	cout &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;
	for( int i = 0; i &lt; length; ++i ) {
		time_t t_ = t[i];
		tminfo = localtime( &amp;t_ );
		cout &lt;&lt; (i+1) &lt;&lt; &quot;.\t&quot; &lt;&lt; names[i] &lt;&lt; &quot;\t\t&quot; &lt;&lt; llrs[i] &lt;&lt; &quot;\t&quot; &lt;&lt; tminfo-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_sec &lt;&lt; &quot;h&quot; &lt;&lt; endl;
	}
	cout &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;

}
</code></pre>
<p>Wenn mein Programm diese Methode aufruft, dann erhalte ich folgenden Fehler (gdb Ausgabe):</p>
<blockquote>
<p>1279117548</p>
<p>Program received signal EXC_BAD_ACCESS, Could not access memory.<br />
Reason: KERN_INVALID_ADDRESS at address: 0x48be8732<br />
0x92dbae9e in __findenv ()<br />
(gdb) up<br />
#1 0x92dbae06 in getenv ()<br />
(gdb) up<br />
#2 0x92df05d4 in _st_tzset_basic ()<br />
(gdb) up<br />
#3 0x92df058c in localtime ()<br />
(gdb) up<br />
#4 0x00006568 in CandidatesTable::toString (this=0xbffff190) at CandidatesTable.cpp:144<br />
144 tminfo = localtime( &amp;now );<br />
(gdb)</p>
</blockquote>
<p>Interessanterweise habe ich diese Methode auch in meinen Unit-Tests verwendet und da läuft es einfach durch ohne zu meckern.</p>
<p>Was ist denn hier jetzt los? Ich versteh das überhaupt nicht. <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/1926241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926241</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Wed, 14 Jul 2010 14:29:30 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarere Segmentation Fault on Wed, 14 Jul 2010 14:38:32 GMT]]></title><description><![CDATA[<p>Okay, ich habe ein &quot;make clean&quot; und anschließend ein wieder ein make gemacht. Jetzt läuft es :). Danke fürs Lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926246</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Wed, 14 Jul 2010 14:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unklarere Segmentation Fault on Thu, 15 Jul 2010 09:27:28 GMT]]></title><description><![CDATA[<p>Hi HändyÄndy,</p>
<p>auch wenn dein ursprüngiches Problem bereits gelöst ist: Die Methode ist &quot;nicht optimal&quot; - sie tut nämlich etwas Anderes als man so spontan vermutet.<br />
Mit &quot;toString&quot; wird in 99,9% der Fälle erwartet, dass man hinterher einen String in den Händen hält - und nicht, dass man auf der Konsole was ansehen kann.</p>
<p>Entweder (falls du wirklich auf die Konsole ausgeben willst) würde ich sowas wie &quot;print()&quot; oder so erwarten.<br />
Oder (falls es tatsächlich in einen String umgewandelt werden soll) du änderst toString() derart, dass es in einen ostringstream schreibt und gibst mittels ostringstream::str() einen string zurück.</p>
<p><strong>Aber</strong>: der toString-Gedanke kommt aus Java (ist auch nicht schlecht) und in C++ ist es bei sowas deutlich üblicher, den operator&lt;&lt;() zu überladen und den Aufrufer selbst entscheiden zu lassen, wohin er die Daten dann transferieren will (Konsole, string, file, Netzwerk, ....).<br />
Wäre auch nicht schwer:</p>
<pre><code class="language-cpp">// ruhig als freie Funktion - ist üblich und müllt nicht die CandidatesTable-Schnittstelle zu
ostream&amp; operator&lt;&lt;(ostream&amp; ost, CandidatesTable const&amp; c) {
	struct tm *tminfo;
	time_t now = time(0);
	ost &lt;&lt; now &lt;&lt; endl;
	tminfo = localtime( &amp;now );
	ost &lt;&lt; endl &lt;&lt; &quot;Aktuelle Kandidaten von &quot; &lt;&lt; asctime( tminfo );
	ost &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;
	for( int i = 0; i &lt; length; ++i ) {
		time_t t_ = t[i];
		tminfo = localtime( &amp;t_ );
		ost &lt;&lt; (i+1) &lt;&lt; &quot;.\t&quot; &lt;&lt; c.names[i] &lt;&lt; &quot;\t\t&quot; &lt;&lt; c.llrs[i] &lt;&lt; &quot;\t&quot; &lt;&lt; tminfo-&gt;tm_hour &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_min &lt;&lt; &quot;:&quot; &lt;&lt; tminfo-&gt;tm_sec &lt;&lt; &quot;h&quot; &lt;&lt; endl;
	}
	ost &lt;&lt; &quot;--------------------------------------------&quot; &lt;&lt; endl;

}

// Aufruf easy:
int main() {
   CandidatesTable c; // irgendwie konstruiert

   cout &lt;&lt; c; // af Konsole
   ofstream out(&quot;CandidatesTable.out&quot;);
   out &lt;&lt; c; // identisch direkt in File

   myNetStream m;
   m &lt;&lt; c; 
...
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1926541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1926541</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 15 Jul 2010 09:27:28 GMT</pubDate></item></channel></rss>