<?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[iconv crash]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code:</p>
<pre><code>int convutf8 (const char *in, char *out)
{
	size_t insize = strlen(in);
	size_t avail = insize*4;
	out = new char(avail);
	memset(out,0,avail);

	iconv_t cd = iconv_open (&quot;utf-8&quot;, &quot;ISO-8859-15&quot;);
	if (cd == (iconv_t) -1){
		if (errno == EINVAL)
			std::cout&lt;&lt;&quot;conversion from 8859-15 to utf8 not available&quot;&lt;&lt;std::endl;
		else
			std::cout&lt;&lt;&quot;error: iconv_open&quot;&lt;&lt;std::endl;
		*out = '\0';
		return -1;
	}

	size_t inLeft=0;
	size_t outLeft=0;
	size_t nconv = iconv (cd, (char **)(&amp;in), &amp;inLeft, &amp;out, &amp;outLeft);
	if (nconv == (size_t) -1){
		std::cout&lt;&lt;&quot;conversion from 88591 to utf8 ERROR&quot;&lt;&lt;std::endl;
	}

	if (iconv_close (cd) != 0)
		std::cout&lt;&lt;&quot;error: iconv_close&quot;&lt;&lt;std::endl;

	return (nconv);
}
</code></pre>
<p>aufgerufen so:</p>
<pre><code>int Testfunc7()
{
	std::string str = readfile(&quot;8859-15.txt&quot;);
	char* conv;
	int ret = convutf8(str.c_str(), conv);
...
}
</code></pre>
<p>crasht (hier in Zeile 8, iconv_open()):</p>
<pre><code>(gdb) bt
#0  0xb7fe1424 in __kernel_vsyscall ()
#1  0xb7768401 in raise () from /lib/libc.so.6
#2  0xb7769b42 in abort () from /lib/libc.so.6
#3  0xb77a3815 in ?? () from /lib/libc.so.6
#4  0xb77a96d1 in ?? () from /lib/libc.so.6
#5  0xb77ac4fd in ?? () from /lib/libc.so.6
#6  0xb77ae10c in malloc () from /lib/libc.so.6
#7  0xb7755955 in ?? () from /lib/libc.so.6
#8  0xb77554fc in iconv_open () from /lib/libc.so.6
#9  0x0804adb2 in convutf8 (in=0x805293c &quot;\344tzendes \326l  &quot;, out=0x8052950 &quot;&quot;) at ucTest/src/uct.cpp:353
#10 0x0804bbb1 in Testfunc7 () at ucTest/src/uct.cpp:194
#11 0x0804dc2a in main (argc=1, argv=0xbfffe5a4) at ucTest/src/uct.cpp:70
</code></pre>
<p>Ich kommt nicht drauf wo mein Fehler ist. Habt ihre eine Idde?</p>
<p>Danke + Grüße<br />
Mattes</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282436/iconv-crash</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 07:59:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282436.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Feb 2011 11:28:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iconv crash on Sun, 20 Feb 2011 11:30:23 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgender Code:</p>
<pre><code>int convutf8 (const char *in, char *out)
{
	size_t insize = strlen(in);
	size_t avail = insize*4;
	out = new char(avail);
	memset(out,0,avail);

	iconv_t cd = iconv_open (&quot;utf-8&quot;, &quot;ISO-8859-15&quot;);
	if (cd == (iconv_t) -1){
		if (errno == EINVAL)
			std::cout&lt;&lt;&quot;conversion from 8859-15 to utf8 not available&quot;&lt;&lt;std::endl;
		else
			std::cout&lt;&lt;&quot;error: iconv_open&quot;&lt;&lt;std::endl;
		*out = '\0';
		return -1;
	}

	size_t inLeft=0;
	size_t outLeft=0;
	size_t nconv = iconv (cd, (char **)(&amp;in), &amp;inLeft, &amp;out, &amp;outLeft);
	if (nconv == (size_t) -1){
		std::cout&lt;&lt;&quot;conversion from 88591 to utf8 ERROR&quot;&lt;&lt;std::endl;
	}

	if (iconv_close (cd) != 0)
		std::cout&lt;&lt;&quot;error: iconv_close&quot;&lt;&lt;std::endl;

	return (nconv);
}
</code></pre>
<p>aufgerufen so:</p>
<pre><code>int Testfunc7()
{
	std::string str = readfile(&quot;8859-15.txt&quot;);
	char* conv;
	int ret = convutf8(str.c_str(), conv);
...
}
</code></pre>
<p>crasht (hier in Zeile 8, iconv_open()):</p>
<pre><code>(gdb) bt
#0  0xb7fe1424 in __kernel_vsyscall ()
#1  0xb7768401 in raise () from /lib/libc.so.6
#2  0xb7769b42 in abort () from /lib/libc.so.6
#3  0xb77a3815 in ?? () from /lib/libc.so.6
#4  0xb77a96d1 in ?? () from /lib/libc.so.6
#5  0xb77ac4fd in ?? () from /lib/libc.so.6
#6  0xb77ae10c in malloc () from /lib/libc.so.6
#7  0xb7755955 in ?? () from /lib/libc.so.6
#8  0xb77554fc in iconv_open () from /lib/libc.so.6
#9  0x0804adb2 in convutf8 (in=0x805293c &quot;\344tzendes \326l  &quot;, out=0x8052950 &quot;&quot;) at ucTest/src/uct.cpp:353
#10 0x0804bbb1 in Testfunc7 () at ucTest/src/uct.cpp:194
#11 0x0804dc2a in main (argc=1, argv=0xbfffe5a4) at ucTest/src/uct.cpp:70
</code></pre>
<p>Ich kommt nicht drauf wo mein Fehler ist. Habt ihre eine Idde?</p>
<p>Danke + Grüße<br />
Mattes</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023611</guid><dc:creator><![CDATA[derMattes]]></dc:creator><pubDate>Sun, 20 Feb 2011 11:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to iconv crash on Sun, 20 Feb 2011 12:43:29 GMT]]></title><description><![CDATA[<p>Das hier:</p>
<pre><code class="language-cpp">char* conv;
    int ret = convutf8(str.c_str(), conv);
</code></pre>
<p>funktioniert nur, wenn conv als Referenz übergeben wird, was nicht der Fall ist. Ferner fordert das hier:</p>
<pre><code class="language-cpp">out = new char(avail);
</code></pre>
<p>Speicher für einen char an und initialisiert diesen mit dem Wert avail. Ansonsten muss inLeft, wenn ich das richtig im Kopf habe, bei Aufruf von iconv die Länge des zu konvertierenden Strings beinhalten, während outLeft die Größe des verfügbaren Ausgabepuffers beinhalten muss.</p>
<p>Der konkrete Fehler wird aber wohl wegen des zweiten Problems auftreten. Mit</p>
<pre><code class="language-cpp">memset(out,0,avail);
</code></pre>
<p>zerschießt du dir den Heap, und als iconv_open Speicher anfordern will, kommt malloc damit nicht zurecht. Richtig wäre vorher</p>
<pre><code class="language-cpp">out = new char[avail];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2023651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023651</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 20 Feb 2011 12:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to iconv crash on Sun, 20 Feb 2011 13:55:12 GMT]]></title><description><![CDATA[<p>danke, recht hast du. Was hab ich da gestern fürn sch... geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Hab das auch inzwischen schon selbst soweit gemerkt, funktioniert auch, nur das memset will noch nicht, das führt immer zu einem segfault beim delete...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023692</guid><dc:creator><![CDATA[derMattes]]></dc:creator><pubDate>Sun, 20 Feb 2011 13:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to iconv crash on Sun, 20 Feb 2011 14:00:43 GMT]]></title><description><![CDATA[<blockquote>
<p>nur das memset will noch nicht, das führt immer zu einem segfault beim delete...</p>
</blockquote>
<p>was auch nur an einem anderen dummen Fehler lag.</p>
<p>Einen schönen Sonntag noch allerseits!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2023695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2023695</guid><dc:creator><![CDATA[derMattes]]></dc:creator><pubDate>Sun, 20 Feb 2011 14:00:43 GMT</pubDate></item></channel></rss>