<?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[Externe Bibliothek buggy?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe das Problem, dass ich eine externe Bibliothek nutze und den verdacht habe, dass dort ein Bug drin ist. Aber da ich nach dem ganzen Gesuche und experimentieren total mit den Nerven durch bin, würde ich euch bitten, mal einen Blick auf den Code zu werfen, ob der denn auch das macht, was er soll:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cassert&gt;

class Releaser
{
	Handle m_handle;

	Releaser(Releaser const&amp;);
	Releaser&amp; operator=(Releaser);

public:
	Releaser()
	: m_handle(CreateHandle()) // != nullptr
	{
		std::cout &lt;&lt; &quot;Created on Adress: &quot;&lt;&lt; m_handle &lt;&lt; std::endl;
	}

	~Releaser()
	{
		int result = ReleaseHandle(this-&gt;m_handle);
		std::cout &lt;&lt; &quot;Destruction Result: &quot; &lt;&lt; result &lt;&lt; std::endl;
	}

	Handle&amp; get()
	{
		return this-&gt;m_handle;
	}

	std::string str() const
	{
		const char * ptr = HandleContent(this-&gt;m_handle); // != nullptr
		const std::size_t size = this-&gt;size(); // == 0

		std::cout &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Size: &quot; &lt;&lt; size &lt;&lt; &quot;, Ptr: &quot; &lt;&lt; ptr &lt;&lt; std::endl;
		assert(ptr != nullptr);
		return std::string(ptr, size);
	} // hier crasht es, aber erst wenn die Funktion verlassen wird

	std::size_t size() const
	{
		std::size_t s = HandleContentLength(this-&gt;m_handle);

		return s;
	}
};

void foo()
{
	Releaser x;
	Releaser error;

	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; x.get() &lt;&lt; &quot; -&gt; &quot; &lt;&lt; x.size() &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;e: &quot; &lt;&lt; error.get() &lt;&lt; &quot; -&gt; &quot; &lt;&lt; error.size() &lt;&lt; std::endl;

	//std::cout &lt;&lt; Foo(error.get(), x.get()) &lt;&lt; std::endl; // fuellt bei Bedarf die Handles

	std::cout &lt;&lt; &quot;e: &quot; &lt;&lt; error.str() &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; x.str() &lt;&lt; std::endl;
}

int main()
{
	foo();

	return 0;
}
</code></pre>
<p>Wobei ich weder die Implementierung noch das genauere Interface des Handles kenne(n kann). Es sieht nur ungefähr so aus:</p>
<pre><code>struct Handle_
{ /* ... */ };
typedef Handle_* Handle;

Handle CreateHandle(); // erzeugt ein Handle

int ReleaseHandle(); // zerstört Handle und gibt eventuelle Fehlercodes zurück

const char* HandleContent(Handle); // gibt den Inhalt des Handles zurück

uint32_t HandleContentLength(Handle); // gibt die Länge des Inhalts des Handles zurück
// auf meinem GCC 4.7.3 mit -m32 kompiliert ist sizeof(std::size_t) == sizeof(uint32_t)
</code></pre>
<p>Mein Ziel war es, da die Bibliothek C ist, da ein bisschen C++-Style drumherum zu wrappen. In dem Fall halt RAII, damit ich nicht vergesse die Handles freizugeben.</p>
<p>Problem: Unter Windows alles gut und schön. Unter Linux stürzt das Programm ohne Angabe von Gründen ab.<br />
Die Ausgabe ist:</p>
<pre><code>Created on Adress: 0x8a63050
Created on Adress: 0x8a63b68
x: 0x8a63050 -&gt; 0
e: 0x8a63b68 -&gt; 0
	Size: 0, Ptr:
</code></pre>
<p>Es fehlt also die Ausgabe des ersten &quot;xXx.str()&quot; Aufrufs sowie alles danach...</p>
<p>Ich möchte eigentlich nur sichergehen, dass ich keinen Fehler gemacht habe und die Bibliothek buggy ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319086/externe-bibliothek-buggy</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 23:54:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319086.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Aug 2013 10:56:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:33:45 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe das Problem, dass ich eine externe Bibliothek nutze und den verdacht habe, dass dort ein Bug drin ist. Aber da ich nach dem ganzen Gesuche und experimentieren total mit den Nerven durch bin, würde ich euch bitten, mal einen Blick auf den Code zu werfen, ob der denn auch das macht, was er soll:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cassert&gt;

class Releaser
{
	Handle m_handle;

	Releaser(Releaser const&amp;);
	Releaser&amp; operator=(Releaser);

public:
	Releaser()
	: m_handle(CreateHandle()) // != nullptr
	{
		std::cout &lt;&lt; &quot;Created on Adress: &quot;&lt;&lt; m_handle &lt;&lt; std::endl;
	}

	~Releaser()
	{
		int result = ReleaseHandle(this-&gt;m_handle);
		std::cout &lt;&lt; &quot;Destruction Result: &quot; &lt;&lt; result &lt;&lt; std::endl;
	}

	Handle&amp; get()
	{
		return this-&gt;m_handle;
	}

	std::string str() const
	{
		const char * ptr = HandleContent(this-&gt;m_handle); // != nullptr
		const std::size_t size = this-&gt;size(); // == 0

		std::cout &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Size: &quot; &lt;&lt; size &lt;&lt; &quot;, Ptr: &quot; &lt;&lt; ptr &lt;&lt; std::endl;
		assert(ptr != nullptr);
		return std::string(ptr, size);
	} // hier crasht es, aber erst wenn die Funktion verlassen wird

	std::size_t size() const
	{
		std::size_t s = HandleContentLength(this-&gt;m_handle);

		return s;
	}
};

void foo()
{
	Releaser x;
	Releaser error;

	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; x.get() &lt;&lt; &quot; -&gt; &quot; &lt;&lt; x.size() &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;e: &quot; &lt;&lt; error.get() &lt;&lt; &quot; -&gt; &quot; &lt;&lt; error.size() &lt;&lt; std::endl;

	//std::cout &lt;&lt; Foo(error.get(), x.get()) &lt;&lt; std::endl; // fuellt bei Bedarf die Handles

	std::cout &lt;&lt; &quot;e: &quot; &lt;&lt; error.str() &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; x.str() &lt;&lt; std::endl;
}

int main()
{
	foo();

	return 0;
}
</code></pre>
<p>Wobei ich weder die Implementierung noch das genauere Interface des Handles kenne(n kann). Es sieht nur ungefähr so aus:</p>
<pre><code>struct Handle_
{ /* ... */ };
typedef Handle_* Handle;

Handle CreateHandle(); // erzeugt ein Handle

int ReleaseHandle(); // zerstört Handle und gibt eventuelle Fehlercodes zurück

const char* HandleContent(Handle); // gibt den Inhalt des Handles zurück

uint32_t HandleContentLength(Handle); // gibt die Länge des Inhalts des Handles zurück
// auf meinem GCC 4.7.3 mit -m32 kompiliert ist sizeof(std::size_t) == sizeof(uint32_t)
</code></pre>
<p>Mein Ziel war es, da die Bibliothek C ist, da ein bisschen C++-Style drumherum zu wrappen. In dem Fall halt RAII, damit ich nicht vergesse die Handles freizugeben.</p>
<p>Problem: Unter Windows alles gut und schön. Unter Linux stürzt das Programm ohne Angabe von Gründen ab.<br />
Die Ausgabe ist:</p>
<pre><code>Created on Adress: 0x8a63050
Created on Adress: 0x8a63b68
x: 0x8a63050 -&gt; 0
e: 0x8a63b68 -&gt; 0
	Size: 0, Ptr:
</code></pre>
<p>Es fehlt also die Ausgabe des ersten &quot;xXx.str()&quot; Aufrufs sowie alles danach...</p>
<p>Ich möchte eigentlich nur sichergehen, dass ich keinen Fehler gemacht habe und die Bibliothek buggy ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343851</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:33:45 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:02:44 GMT]]></title><description><![CDATA[<p>Bei deinem &quot;Releaser&quot; hast du die Rule of Three verletzt, das kann natürlich zu double deletes führen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343853</guid><dc:creator><![CDATA[ro3]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:02:44 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:05:29 GMT]]></title><description><![CDATA[<p>ro3 schrieb:</p>
<blockquote>
<p>Bei deinem &quot;Releaser&quot; hast du die Rule of Three verletzt, das kann natürlich zu double deletes führen.</p>
</blockquote>
<p>Jain. Ich habs nachträglich grad reingebaut, es gab sowohl vorher als auch nachher keinen Fehler.</p>
<p>Und das was ich gepostet habe war schon das vollständige abstürzende Programm. Ich sehe doch richtig, dass da keiner der Kopiermethoden(Copy-Ctor und CopyAssignment-Operator) gebraucht wird oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343855</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:05:29 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:14:20 GMT]]></title><description><![CDATA[<p><code>ptr</code> (in Z. 35) ist nicht <code>nullptr</code> ? Der darf es nämlich nicht sein für den C'tor von <code>std::string</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343856</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:21:17 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p><code>ptr</code> (in Z. 35) ist nicht <code>nullptr</code> ? Der darf es nämlich nicht sein für den C'tor von <code>std::string</code> .</p>
</blockquote>
<p>Nein. Der Inhalt ist zwar (wie eigentlich gewollt) 0, aber damit kommt std::string ja klar.</p>
<p>Selbst wenn ichd as return zu dem hier ändere, crasht es:</p>
<pre><code>return &quot;&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343859</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:26:20 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Furble Wurble schrieb:</p>
<blockquote>
<p><code>ptr</code> (in Z. 35) ist nicht <code>nullptr</code> ? Der darf es nämlich nicht sein für den C'tor von <code>std::string</code> .</p>
</blockquote>
<p>Nein. Der Inhalt ist zwar (wie eigentlich gewollt) 0, aber damit kommt std::string ja klar.</p>
<p>Selbst wenn ichd as return zu dem hier ändere, crasht es:</p>
<pre><code>return &quot;&quot;;
</code></pre>
</blockquote>
<p>Moment. Wenn es ein <code>nullptr</code> ist kann auch schon die Ausgabe crashen. Dann ist auch das (nachträgliche eingebaute) <code>assert</code> zu spät.<br />
Und: nein, der C'tor kommt nicht mit einem <code>nullptr</code> klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343860</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:32:22 GMT]]></title><description><![CDATA[<p>Vielleicht liefert HandleContent(this-&gt;m_handle) Müll, wenn nichts enthalten ist, d.h. in deiner Ausgabe von ptr greifst du schon ins Klo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343862</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:32:35 GMT]]></title><description><![CDATA[<p>Ich hab das vorhin auch mal getestet nebenbei.<br />
Wenn der Ctor von <em>std::string</em> einen <em>nullptr</em> bekommt fliegt eine Exception, damit kann ich dann was anfangen.</p>
<p>Aber nichtsdestotrotz habe ich hier mal ein wenig geändert:</p>
<pre><code>std::string str() const
	{
		const char * ptr = HandleContent(this-&gt;m_handle);
		assert(ptr != nullptr);

		const std::size_t size = this-&gt;size();

		std::cout &lt;&lt; &quot;\tAdress of ptr: &quot; &lt;&lt; std::addressof(ptr) &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Size: \&quot;&quot; &lt;&lt; size &lt;&lt; &quot;\&quot;, Ptr: \&quot;&quot; &lt;&lt; ptr &lt;&lt; &quot;\&quot;&quot;&lt;&lt; std::endl;

		return std::string(ptr, size);
	}
</code></pre>
<p>Gleicher Fehler, gleiche Ausgabe, bis auf die Adresse des <em>ptr</em>.</p>
<p>Starte ich das Programm nicht aus Eclipse sondern aus der Console, dann steht da was von Speicherzugriffssfehler. Valgrind meint auch irgendwas von Segmentationsfault und dass knapp 345000 Bytes &quot;possibly lost&quot; sind. Aber das ist das erste mal, dass ich mit Valgrind arbeite, daher kann ich da noch nix itnerpretieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343863</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:37:56 GMT]]></title><description><![CDATA[<p>Duerfen die Funktionen ueberhaupt aufgerufen werden, wenn der Content ungueltig ist?</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Size: &quot; &lt;&lt; size &lt;&lt; &quot;, Ptr: &quot; &lt;&lt; ptr &lt;&lt; std::endl;
</code></pre>
<p>Nun, was passiert hier, wenn ptr ungueltig ist?</p>
<blockquote>
<p>Wenn der Ctor von std::string einen nullptr bekommt fliegt eine Exception, damit kann ich dann was anfangen.</p>
</blockquote>
<p>Und wenn er nicht 0 ist aber trotzdem Muell?</p>
<blockquote>
<p>dann steht da was von Speicherzugriffssfehler</p>
</blockquote>
<p>Das passiert beim Dereferenzieren von Pointern. Wieviele Pointer hast du und wo werden sie dereferenziert? <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="🙂"
    /> Vielelicht liesst du nochmals die Spezifikation zu HandleContent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343864</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:44:34 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Duerfen die Funktionen ueberhaupt aufgerufen werden, wenn der Content ungueltig ist?</p>
</blockquote>
<p>Laut Doku:</p>
<blockquote>
<p>Gibt den Inhalt eines Rückgabepuffers zurück.</p>
<p>Der zurückgegebene Zeiger verweist auf ein Character-Array, das alle in den Rückgabepuffer<br />
geschriebenen Bytes sowie eine abschließende Null-Terminierung enthält. Dieses Array existiert so<br />
lange im Speicher, bis der Rückgabepuffer entweder erneut beschrieben oder freigegeben wird.</p>
<p>Return:<br />
- Bei Übergabe eines gültigen Handles: Zeiger auf den null-terminierten Rückgabepuffer-Inhalt<br />
- Bei Übergabe des ungültigen Wertes NULL: NULL</p>
<p>Parameter:<br />
in : Handle auf einen mit CreateHandle() angelegten<br />
Rückgabepuffer. Dieser Rückgabepuffer darf nicht bereits<br />
freigegeben worden sein.</p>
</blockquote>
<p>knivil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Size: &quot; &lt;&lt; size &lt;&lt; &quot;, Ptr: &quot; &lt;&lt; ptr &lt;&lt; std::endl;
</code></pre>
<p>Nun, was passiert hier, wenn ptr ungueltig ist?</p>
</blockquote>
<p>Dann kommt irgendein Müll da raus. Aber es wird ja explizit nichts ausgegeben, weil der Inhalt von ptr = {'\0'} ist.</p>
<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Wenn der Ctor von std::string einen nullptr bekommt fliegt eine Exception, damit kann ich dann was anfangen.</p>
</blockquote>
<p>Und wenn er nicht 0 ist aber trotzdem Muell?</p>
</blockquote>
<p>Du meinst ins sonst wohin zeigt? Tja, dann würde der Müll lesen, tut er aber nicht.</p>
<p>Edit: Das oben ist die gesamte Doku zu dem Rueckgabepuffer (wie er wirklich heisst).<br />
Ich habe selbst keine eigenen Pointer hier reingebracht ausser denen, die ihr im Code seht. Mir wurde (unter anderem hier im Forum) immer gelehrt, richtig C++ zu schreiben mit RAII, Ressourcenzuständigkeiten usw. Und daher will ich die Bibliothek so in Klassen wrappen, dass sowohl Exceptionsicherheiten gegeben sind, als auch Speicher und Ressourcen wieder richtig und vollautomatisch freigegeben werden. (Das sehe ich doch gar nicht mal so falsch, denke ich.)</p>
<p>Aber wenn in den fremden Funktionen Fehler gemacht werden, kann ich da nichts machen, ausser alles auf ein Minimalbeispiel zu reduzieren und daraus eine Bugreport zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343865</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:43:47 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Wenn der Ctor von <em>std::string</em> einen <em>nullptr</em> bekommt fliegt eine Exception, damit kann ich dann was anfangen.</p>
</blockquote>
<blockquote>
<p><code>basic_string(const charT* s, size_type n, const Allocator&amp; a = Allocator());</code><br />
6 Requires: s shall not be a null pointer and n &lt; npos.</p>
</blockquote>
<p>Mit anderen Worten: Bei nullptr bekommst du UB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343866</guid><dc:creator><![CDATA[excepter]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 11:59:36 GMT]]></title><description><![CDATA[<p>UB heisst doch, dass die Compilerhersteller machen können was sie wollen.<br />
Und ich habe das vorhin auch mal durchprobiert und da wurde mir ein std::logic_error geworfen (GCC 4.7.3)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343871</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 11:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:07:00 GMT]]></title><description><![CDATA[<p>Deine Aussagen, dass es kein <code>nullptr</code> ist reichen mir noch nicht, nachher kompilierst Du mit NDEBUG, oder so.</p>
<pre><code class="language-cpp">std::string str() const
    {
        const char * ptr = HandleContent(this-&gt;m_handle);
        return ptr==nullptr ? &quot;&quot; : std::string(ptr);
    }
</code></pre>
<p>Gleicher Absturz?</p>
<p>Können wir die Library ausprobieren, oder ist das was internes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343874</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:10:48 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>UB heisst doch, dass die Compilerhersteller machen können was sie wollen.</p>
</blockquote>
<p>Ne, das ist <code>implementation-defined behavior</code> Ub heißt, dass sich keiner drum scheren muss. Bei <code>implementation-defined behavior</code> muss man sich drum scheren, d.h. was passiert, muss irgendwo dokumentiert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343877</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:10:48 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:19:55 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Deine Aussagen, dass es kein <code>nullptr</code> ist reichen mir noch nicht, nachher kompilierst Du mit NDEBUG, oder so.</p>
<pre><code class="language-cpp">std::string str() const
    {
        const char * ptr = HandleContent(this-&gt;m_handle);
        return ptr==nullptr ? &quot;&quot; : std::string(ptr);
    }
</code></pre>
<p>Gleicher Absturz?</p>
<p>Können wir die Library ausprobieren, oder ist das was internes?</p>
</blockquote>
<p>Ja, leider was internes.<br />
Und ja, gleicher Absturz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343880</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:35:01 GMT]]></title><description><![CDATA[<p>Tja...dumm das.</p>
<p>Bist Du sicher, dass Du keinen Zwischenschritt vergessen hast? Z.b. schreibt die Doku ja irgendwas von &quot;Rückgabepuffer beschreiben&quot;.</p>
<p>Und sonst: Code reduzieren.<br />
Ein Durchlauf<br />
1. Create<br />
2. mach was mit Content<br />
3. Release<br />
ohne Wrapper funktioniert?</p>
<p>Darf evtl. nur ein solch Handle zu jeder Zeit existieren?</p>
<p>Ratlos,<br />
FW</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343886</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:44:20 GMT]]></title><description><![CDATA[<pre><code>int main()
{
	Handle x = CreateHandle();

	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; x &lt;&lt; &quot; -&gt; &quot; &lt;&lt; HandleContentLength(x) &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;x: &quot; &lt;&lt; HandleContent(x) &lt;&lt; std::endl;

	int r = ReleaseHandle(x);

	std::cout &lt;&lt; r &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>x: 0xf7472000 -&gt; 0
Speicherzugriffsfehler (Speicherabzug geschrieben)
</code></pre>
<p>Also es müssen rein von der Funktionalität mehrere Handles gleichzeitig existieren dürfen, da manche Funktionen der Bibliothek mehrere dieser Handles erwarten und da auch was reinschreiben.</p>
<p>Das Problem, auch bei meinem großen Programm, wo diese Dinger drin eingearbeitet waren, und auch wirklich nachprüfbar was in den Puffern stand und extrahiert wurde nach string, crashte es bei Rücksprung aus der Funktion zum Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343888</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:46:27 GMT]]></title><description><![CDATA[<p>Wenn es was internes ist, dann hast du ja die Moeglichkeit in die Implementation zu schauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343889</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:46:27 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:53:48 GMT]]></title><description><![CDATA[<p>Nein. Es ist nichts internes unserer Firma hier. Aber es ist nichts öffentliches.<br />
Ich habe einige *.so's, einige *.dll's und ein paar Header-Dateien.</p>
<p>Und glaub mir, wenn wir da an die Interna drankämen, wäre das ganze Ding schon neugeschrieben, damit es nicht nur mal läuft sondern auch Fehler überhaupt mal meldet (aber das ist 'ne andere Geschichte).</p>
<p>Aber um es mal beim Namen zu nennen, es geht um den Elster Rich Client (ERiC 18.1.4.65766) und die Handles sind RueckgabepufferHandle's (ja, es ist eine deutsche Bibliothek)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343892</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:59:19 GMT]]></title><description><![CDATA[<p>Mir fällt auf, dass <code>HandleContentLength</code> 0 zurückgibt, vielleicht darfst du in dem Fall <code>HandleContent</code> gar nicht aufrufen? Sagt die Doku irgendwas dazu? Oder tritt der Fehler immer auf, auch wenn <code>HandleContentLength</code> einen Wert &gt;0 zurückgibt?</p>
<p>Edit:<br />
Ist das der gleiche Verein, der auch den Bundestrojaner programmiert hat? <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="😃"
    /><br />
*Duck und weg*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343893</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 12:58:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Gibt die Länge des Inhalts eines Rückgabepuffers zurück.<br />
Die zurückgegebene Zahl entspricht der Anzahl von Bytes, die von einer zuvor aufgerufenen ERiC<br />
API-Funktion in den Rückgabepuffer geschrieben wurden. Die Null-Terminierung, die bei Aufruf von<br />
EricRueckgabepufferInhalt() an das zurückgegebene Character-Array angefügt wird, wird bei dieser<br />
Längenangabe nicht berücksichtigt.</p>
<p>Parameter:<br />
in : Handle auf einen mit EricRueckgabepufferErzeugen() angelegten<br />
Rückgabepuffer. Dieser Rückgabepuffer darf nicht bereits<br />
freigegeben worden sein.</p>
<p>Rückgabe:<br />
- Bei Übergabe eines gültigen Handles: Anzahl der in den Rückgabepuffer geschriebenen Bytes<br />
- Bei Übergabe des ungültigen Wertes NULL: 0</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2343895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343895</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 12:58:10 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 13:06:44 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<blockquote>
<p>Gibt die Länge des Inhalts eines Rückgabepuffers zurück.<br />
Die zurückgegebene Zahl entspricht der Anzahl von Bytes, die von einer zuvor aufgerufenen ERiC<br />
API-Funktion in den Rückgabepuffer geschrieben wurden. Die Null-Terminierung, die bei Aufruf von<br />
EricRueckgabepufferInhalt() an das zurückgegebene Character-Array angefügt wird, wird bei dieser<br />
Längenangabe nicht berücksichtigt.</p>
<p>Parameter:<br />
in : Handle auf einen mit EricRueckgabepufferErzeugen() angelegten<br />
Rückgabepuffer. Dieser Rückgabepuffer darf nicht bereits<br />
freigegeben worden sein.</p>
<p>Rückgabe:<br />
- Bei Übergabe eines gültigen Handles: Anzahl der in den Rückgabepuffer geschriebenen Bytes<br />
- Bei Übergabe des ungültigen Wertes NULL: 0</p>
</blockquote>
</blockquote>
<p>Und hast du getestet, ob das stimmt? Insbesondere wenn size 0 liefert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343898</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 06 Aug 2013 13:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 13:17:26 GMT]]></title><description><![CDATA[<p>Also wenn ich die Länge des <em>nullptr</em> abfrage kommt wie dokumentiert auch 0 raus.</p>
<p>Greife ich auf irgendeine Speicheradresse zu crasht es (wie eigentlich erwartet), irgendwelche Checks macht ERiC also nicht.</p>
<p>Also ich denke, ich habe die Spezifikationen dieser Doku schon getestet. o_O</p>
<p>Was meinst du genau?</p>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Ist das der gleiche Verein, der auch den Bundestrojaner programmiert hat? <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="😃"
    /><br />
*Duck und weg*</p>
</blockquote>
<p>Offensichtlich nicht, denn der Bundestrojaner hat doch halbwegs funktioniert, wenn ich mich recht erinnere <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="😃"
    /><br />
Aber laut Wikipedia kommt der Bundestrojaner von der <em>Digi Task GmbH</em> im Auftrag der Bayerischen Staatsregierung. Und ERiC kommt auch aus Bayern (Steueramt oder Finanzamt oder sowas). Mh, ich frag mal grad die Illuminanten.....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343901</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 13:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 13:26:35 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Also wenn ich die Länge des <em>nullptr</em> abfrage kommt wie dokumentiert auch 0 raus.</p>
</blockquote>
<p>Spannend wird es ja erst bei der Umkehrung. Evtl. ist der zugriff auf <code>HandleContent()</code> ungültig, wenn <code>HandleContentLength()==0</code> - auf jeden Fall ist er überflüssig.</p>
<p>Allerdings verstehe ich das hier:</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Das Problem, auch bei meinem großen Programm, wo diese Dinger drin eingearbeitet waren, und auch wirklich nachprüfbar was in den Puffern stand und extrahiert wurde nach string, crashte es bei Rücksprung aus der Funktion zum Aufruf.</p>
</blockquote>
<p>(so unverständlich es auch geschrieben sein mag)<br />
dahingehend, dass auch bei <code>HandleContentLength()!=0</code> der Wrapper crasht.<br />
Richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343903</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 06 Aug 2013 13:26:35 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 13:30:54 GMT]]></title><description><![CDATA[<p>Ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343905</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 06 Aug 2013 13:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Externe Bibliothek buggy? on Tue, 06 Aug 2013 14:26:58 GMT]]></title><description><![CDATA[<blockquote>
<p>Also wenn ich die Länge des nullptr abfrage kommt wie dokumentiert auch 0 raus.</p>
</blockquote>
<p>Und was bedeutet Laenge? Groesse des Buffers? Warum dann nicht eins? Hast du die Bibliothek korrekt initialisiert?</p>
<p>Ansonsten zusammenfassend: Es crasht also recht haeufig. Aber bei anderen funktioniert die Bibliothek ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343921</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Aug 2013 14:26:58 GMT</pubDate></item></channel></rss>