<?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[Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D)]]></title><description><![CDATA[<p>Hi...<br />
ich bastel hier grad an nem interface zwischen meinem eigentlichen Programm und der TNT library (<a href="http://math.nist.gov/tnt/download.html" rel="nofollow">http://math.nist.gov/tnt/download.html</a>).<br />
Falls die Frage aufkommt, warum?<br />
Ich soll das so machen. Falls mein chef sich irgendwann entscheidet, eine andere library zu benutzen oder sie selber zu schreiben, muss so nicht das ganze Programm umgeschrieben werden, sondern nur das interface <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>jetzt zu dem Problem:<br />
das programm stürzt während der laufzeit ab, wenn ich auf eine matrix zugreife, aber nur wenn ich nicht auf die erste zeile zugreife.<br />
ich vermute daher einen zeiger- und logikfehler meinerseits, da die library bei anderen programmen funktioniert.</p>
<p>ein funktionierender zugriff in der main könnte zB. so aussehen:</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;interface-test.h&quot;

int main()
{	
	int x1=5;
	int y1=5;
	Matrix &lt;int&gt; test1(x1,y1);
	std::cout &lt;&lt; &quot;Matrix1: \n&quot; &lt;&lt; test1(0,1) &lt;&lt; std::endl;
}
</code></pre>
<p>wobei aber sowas abstürzen würde:</p>
<pre><code>...
std::cout &lt;&lt; &quot;Matrix1: \n&quot; &lt;&lt; test1(1,0) &lt;&lt; std::endl;
...
</code></pre>
<p>hier ist die interface datei:</p>
<pre><code>#ifndef MATRIX_INTERFACE_H_
#define MATRIX_INTERFACE_H_
#define maxdim 10000		 /* Max dimension for the matrix/vector
								If the dimension of a new matrix is higher,
								it will be cutted to this dimension 
							 */

#include &quot;tnt.h&quot;

template &lt;class temp&gt;
class Matrix
{
private:
	unsigned int itsRows;
	unsigned int itsColumns;
	TNT::Array2D&lt;temp&gt; *itsArray2D;

public:
	Matrix(unsigned int rows, unsigned int columns);
	~Matrix();

	//operator
	inline temp&amp; operator()(unsigned int i, unsigned int j);

};

// C O N S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::Matrix(unsigned int rows, unsigned int columns):
itsRows(rows), itsColumns(columns)
{
	if (rows &gt; maxdim) rows = maxdim;
	if (columns &gt; maxdim) columns = maxdim;

	itsArray2D = new TNT::Array2D&lt;temp&gt;(rows, columns);
}

// D E S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::~Matrix()
{
    delete itsArray2D;
    itsArray2D = 0;
}

//O P E R A T O R  overloading
template&lt;class temp&gt;
inline temp&amp; Matrix&lt;temp&gt;::operator()(unsigned int i, unsigned int j)
{
	return *itsArray2D[i][j];
}

#endif
</code></pre>
<p>meine interface klasse &quot;Matrix&quot; greift auf die &quot;Array2D&quot; Klasse der TNT library zu, wobei da die Operatorüberladung auf der Zeile 140 genutzt wird (tnt_array2d.h):</p>
<pre><code>template &lt;class T&gt;
inline T* Array2D&lt;T&gt;::operator[](int i) 
{ 
#ifdef TNT_BOUNDS_CHECK
	assert(i &gt;= 0);
	assert(i &lt; m_);
#endif

return v_[i]; 

}
</code></pre>
<p>wobei gilt (array2d.h zeile 46):</p>
<pre><code>Array1D&lt;T*&gt; v_;
</code></pre>
<p>diese greift wiederrum auf die &quot;Array1D&quot; Klasse der TNT library zu (tnt_array1d.h):</p>
<pre><code>template &lt;class T&gt;
inline T&amp; Array1D&lt;T&gt;::operator[](int i) 
{ 
#ifdef TNT_BOUNDS_CHECK
	assert(i&gt;= 0);
	assert(i &lt; n_);
#endif
	return data_[i]; 
}
</code></pre>
<p>wobei gilt (array1d.h zeile 47):</p>
<pre><code>T* data_;				/* this normally points to v_.begin(), but
                             * could also point to a portion (subvector)
							 * of v_.
                            */
</code></pre>
<p>ich hab schon ne menge geändert und vereinfacht, trotzdem stürzt das prog während der laufzeit ab...<br />
ich weiß, ich hab hier nen ganzen batzen hingeschrieben, doch bitte helft mir...<br />
ist echt nervig, wenn man tagelang an so nem fehler sitzt und seinen fehler nicht erkennt <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 hab den fehler per debugging bis zum return sprung (tnt_array2d.h zeile 148, hier in dem Array2D-ausschnitt zeile 9) zurückverfolgt. und zwar wenn er zurück in die &quot;Matrix&quot; klasse springt (d.h. es ist alles aus der Array2D und Array1D klasse ausgewertet und er will den wert der Matrix klasse übergeben), genau zu dem zeitpunkt stürzt er ab... was ich aber nicht nachvollziehen kann</p>
<p>weiß da jemand rat?<br />
würd nur ungern an nem gehirnknoten sterben <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>herzlichen Dank schonmal<br />
Kleriker</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227145/programmabsturz-vermutlich-zeigerfehler-bei-zugriff-auf-matrix-unter-benutzung-der-tnt-library-array2d</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 04:02:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227145.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Nov 2008 17:16:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Tue, 11 Nov 2008 17:16:53 GMT]]></title><description><![CDATA[<p>Hi...<br />
ich bastel hier grad an nem interface zwischen meinem eigentlichen Programm und der TNT library (<a href="http://math.nist.gov/tnt/download.html" rel="nofollow">http://math.nist.gov/tnt/download.html</a>).<br />
Falls die Frage aufkommt, warum?<br />
Ich soll das so machen. Falls mein chef sich irgendwann entscheidet, eine andere library zu benutzen oder sie selber zu schreiben, muss so nicht das ganze Programm umgeschrieben werden, sondern nur das interface <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>jetzt zu dem Problem:<br />
das programm stürzt während der laufzeit ab, wenn ich auf eine matrix zugreife, aber nur wenn ich nicht auf die erste zeile zugreife.<br />
ich vermute daher einen zeiger- und logikfehler meinerseits, da die library bei anderen programmen funktioniert.</p>
<p>ein funktionierender zugriff in der main könnte zB. so aussehen:</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;interface-test.h&quot;

int main()
{	
	int x1=5;
	int y1=5;
	Matrix &lt;int&gt; test1(x1,y1);
	std::cout &lt;&lt; &quot;Matrix1: \n&quot; &lt;&lt; test1(0,1) &lt;&lt; std::endl;
}
</code></pre>
<p>wobei aber sowas abstürzen würde:</p>
<pre><code>...
std::cout &lt;&lt; &quot;Matrix1: \n&quot; &lt;&lt; test1(1,0) &lt;&lt; std::endl;
...
</code></pre>
<p>hier ist die interface datei:</p>
<pre><code>#ifndef MATRIX_INTERFACE_H_
#define MATRIX_INTERFACE_H_
#define maxdim 10000		 /* Max dimension for the matrix/vector
								If the dimension of a new matrix is higher,
								it will be cutted to this dimension 
							 */

#include &quot;tnt.h&quot;

template &lt;class temp&gt;
class Matrix
{
private:
	unsigned int itsRows;
	unsigned int itsColumns;
	TNT::Array2D&lt;temp&gt; *itsArray2D;

public:
	Matrix(unsigned int rows, unsigned int columns);
	~Matrix();

	//operator
	inline temp&amp; operator()(unsigned int i, unsigned int j);

};

// C O N S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::Matrix(unsigned int rows, unsigned int columns):
itsRows(rows), itsColumns(columns)
{
	if (rows &gt; maxdim) rows = maxdim;
	if (columns &gt; maxdim) columns = maxdim;

	itsArray2D = new TNT::Array2D&lt;temp&gt;(rows, columns);
}

// D E S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::~Matrix()
{
    delete itsArray2D;
    itsArray2D = 0;
}

//O P E R A T O R  overloading
template&lt;class temp&gt;
inline temp&amp; Matrix&lt;temp&gt;::operator()(unsigned int i, unsigned int j)
{
	return *itsArray2D[i][j];
}

#endif
</code></pre>
<p>meine interface klasse &quot;Matrix&quot; greift auf die &quot;Array2D&quot; Klasse der TNT library zu, wobei da die Operatorüberladung auf der Zeile 140 genutzt wird (tnt_array2d.h):</p>
<pre><code>template &lt;class T&gt;
inline T* Array2D&lt;T&gt;::operator[](int i) 
{ 
#ifdef TNT_BOUNDS_CHECK
	assert(i &gt;= 0);
	assert(i &lt; m_);
#endif

return v_[i]; 

}
</code></pre>
<p>wobei gilt (array2d.h zeile 46):</p>
<pre><code>Array1D&lt;T*&gt; v_;
</code></pre>
<p>diese greift wiederrum auf die &quot;Array1D&quot; Klasse der TNT library zu (tnt_array1d.h):</p>
<pre><code>template &lt;class T&gt;
inline T&amp; Array1D&lt;T&gt;::operator[](int i) 
{ 
#ifdef TNT_BOUNDS_CHECK
	assert(i&gt;= 0);
	assert(i &lt; n_);
#endif
	return data_[i]; 
}
</code></pre>
<p>wobei gilt (array1d.h zeile 47):</p>
<pre><code>T* data_;				/* this normally points to v_.begin(), but
                             * could also point to a portion (subvector)
							 * of v_.
                            */
</code></pre>
<p>ich hab schon ne menge geändert und vereinfacht, trotzdem stürzt das prog während der laufzeit ab...<br />
ich weiß, ich hab hier nen ganzen batzen hingeschrieben, doch bitte helft mir...<br />
ist echt nervig, wenn man tagelang an so nem fehler sitzt und seinen fehler nicht erkennt <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 hab den fehler per debugging bis zum return sprung (tnt_array2d.h zeile 148, hier in dem Array2D-ausschnitt zeile 9) zurückverfolgt. und zwar wenn er zurück in die &quot;Matrix&quot; klasse springt (d.h. es ist alles aus der Array2D und Array1D klasse ausgewertet und er will den wert der Matrix klasse übergeben), genau zu dem zeitpunkt stürzt er ab... was ich aber nicht nachvollziehen kann</p>
<p>weiß da jemand rat?<br />
würd nur ungern an nem gehirnknoten sterben <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>herzlichen Dank schonmal<br />
Kleriker</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613250</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Tue, 11 Nov 2008 17:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Wed, 12 Nov 2008 14:33:20 GMT]]></title><description><![CDATA[<p>ich tippe auf das hier.</p>
<pre><code class="language-cpp">//O P E R A T O R  overloading
template&lt;typename temp&gt;
inline temp&amp; Matrix&lt;temp&gt;::operator()(unsigned int i, unsigned int j)
{
    //return *itsArray2D[i][j];
    return itsArray2D[i][j];
}
</code></pre>
<p>nehmen wir mal an du hast für den typ temp, int eingesetzt</p>
<p>kommt sowas raus</p>
<pre><code class="language-cpp">inline int&amp; Matrix::operator()(unsigned int i, unsigned int j)
{
    return *itsArray2D[i][j];
}
</code></pre>
<p>wir nehmen jetzt an das itsArray2D[i][j] einen integer zurück gibt.<br />
dann liefert *itsArray[i][j] blödsinn.<br />
du dereferenzierst einen integer der irgend einen wert hat, das kann dann auf irgendeinen speicherbereich zeigen, und du kriegst einen segfault.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613599</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Wed, 12 Nov 2008 14:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Wed, 12 Nov 2008 19:08:13 GMT]]></title><description><![CDATA[<blockquote>
<p>wir nehmen jetzt an das itsArray2D[i][j] einen integer zurück gibt.</p>
</blockquote>
<p>itsArray2D[i][j] liefert doch keinen integer zurück sondern einen zeiger</p>
<pre><code class="language-cpp">template &lt;class T&gt;
inline T* Array2D&lt;T&gt;::operator[](int i)
{
#ifdef TNT_BOUNDS_CHECK
    assert(i &gt;= 0);
    assert(i &lt; m_);
#endif

return v_[i];

}
</code></pre>
<p>wenn also ein zeiger zurück gegeben wird, dann macht <em>itsArray2D[i][j] sinn.<br />
abgesehen davon, würde die variante ohne * nicht funktionieren... die fehlermeldung würde dann ungefähr lauten, dass er int nicht auf int</em> hinbekommt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613715</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Wed, 12 Nov 2008 19:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 07:44:36 GMT]]></title><description><![CDATA[<p>ja, es liefert einen zeiger auf ein proxy objekt, dieses proxy objekt selber hat einen überladenen opearor[] implementiert.</p>
<p>das ist ein trick um mehrdimensionales adressieren per operator[] zu ermöglichen,<br />
da es in c++ keinen operator[][] oder operator[][]...[] gibt.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
inline T* Array2D&lt;T&gt;::operator[](int i)
{
#ifdef TNT_BOUNDS_CHECK
    assert(i &gt;= 0);
    assert(i &lt; m_);
#endif

return v_[i];

} 

//das genau passiert
ProxyObjekt* pProxy = itsArray2D[j];
int deinWert = pProxy[i];

//oder in einer zeile
int deinWert = itsArray2D[j][i];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1613853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613853</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 07:54:33 GMT]]></title><description><![CDATA[<p>nachtrag.</p>
<p>und falls array2D wirklich nicht so implementiert ist um mehrdimensionalität per proxy objekt zu machen, und einfach itsArray2D[j][i] nicht ausreicht um an den zellenwert zu kommen, dann müsste es so gehen (*itsArray2D[j])[i];</p>
<p>aber, da es eben möglich ist, und library entwickler sichs drauf stehen eine klare ausdrucksweise in ihren libraries zu haben, denke ich das die erste methode die richtige ist (ohne in den code geschaut zu haben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613861</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:54:33 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 15:15:09 GMT]]></title><description><![CDATA[<blockquote>
<p>ja, es liefert einen zeiger auf ein proxy objekt, dieses proxy objekt selber hat einen überladenen opearor[] implementiert.</p>
<p>das ist ein trick um mehrdimensionales adressieren per operator[] zu ermöglichen,<br />
da es in c++ keinen operator[][] oder operator[][]...[] gibt.</p>
</blockquote>
<p>ja ich denke du hast vollkommen recht</p>
<p>wenn ich aber itsArray2D[i][j] verwende, bekomme ich den fehler:</p>
<blockquote>
<p>error C2440: 'return': 'int *' kann nicht in 'int &amp;' konvertiert werden</p>
</blockquote>
<p>und wenn ich (*itsArray[i])[j] bekomm ich die fehler:</p>
<blockquote>
<p>error C2593: 'Operator *' ist mehrdeutig</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1614192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614192</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Thu, 13 Nov 2008 15:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 16:17:08 GMT]]></title><description><![CDATA[<p>Nachtrag:</p>
<p>ich muss</p>
<pre><code class="language-cpp">inline temp&amp; Matrix&lt;temp&gt;::operator()(unsigned int i, unsigned int j);
</code></pre>
<p>mit temp&amp; als rückgabewert definieren, weil ich auch darauf zugreifen möchte um einen wert einzutragen<br />
trotzdem hatte ich es mal mit temp statt temp&amp; als rückgabe probiert habe, und das hatte aber ebenfalls nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614229</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Thu, 13 Nov 2008 16:17:08 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 17:33:48 GMT]]></title><description><![CDATA[<p>Kleriker schrieb:</p>
<blockquote>
<p>und wenn ich (*itsArray[i])[j] bekomm ich die fehler:</p>
<blockquote>
<p>error C2593: 'Operator *' ist mehrdeutig</p>
</blockquote>
</blockquote>
<p>(*(itsArray[i]))[j];</p>
<p>wenn das nicht klappt, les ich mal TNT sourcen <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/1614283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614283</guid><dc:creator><![CDATA[inpimp]]></dc:creator><pubDate>Thu, 13 Nov 2008 17:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 18:52:02 GMT]]></title><description><![CDATA[<p>inpimp schrieb:</p>
<blockquote>
<p>(*(itsArray[i]))[j];</p>
</blockquote>
<p>bekomm immer noch die fehlermeldung</p>
<blockquote>
<p>error C2593: 'Operator *' ist mehrdeutig</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1614317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614317</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Thu, 13 Nov 2008 18:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 19:17:52 GMT]]></title><description><![CDATA[<p>Ehm, wenn ich mich mal dazwischen schalten darf ...<br />
Das Problem ist äusserst einfach ...</p>
<p>Deklaration:</p>
<pre><code class="language-cpp">TNT::Array2D&lt;temp&gt; *itsArray2D;
</code></pre>
<p>Korrekte Verwendung:</p>
<pre><code class="language-cpp">return (*itsArray2D)[i][j];
</code></pre>
<p>Wenn du sowas machst:</p>
<pre><code class="language-cpp">return itsArray2D[i][j];
</code></pre>
<p>Dann geht es zum i-ten Array2D und dann wendet es darauf den operator [] an, was einem ein int* zurückgibt. Kompilerfehler garantiert.<br />
Ein Proxy wird übrigens nicht verwendet, das kannst du in der Dokumentation nachlesen.</p>
<p>Wenn du das da machst:</p>
<pre><code class="language-cpp">return *itsArray2D[i][j];
</code></pre>
<p>Dann wird noch das int* dereferenziert und somit gibt es keinen Kompilerfehler, dafür wahrscheinlich ein Segfault. Du greifst ja auf das i-te Array2D zu, welches nicht existiert.</p>
<p>Beste Lösung:</p>
<pre><code class="language-cpp">template &lt;class temp&gt;
class Matrix
{
private:
    unsigned int itsRows; // Wofür eigentlich? TNT::Array2D bietet sowas schon an.
    unsigned int itsColumns; // Wofür eigentlich? TNT::Array2D bietet sowas schon an.
    TNT::Array2D&lt;temp&gt; itsArray2D; // ZEIGER WEG

public:
    Matrix(unsigned int rows, unsigned int columns);
    ~Matrix();

    //operator
    inline temp&amp; operator()(unsigned int i, unsigned int j);
};

// C O N S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::Matrix(unsigned int rows, unsigned int columns)
  : itsRows(rows),
  , itsColumns(columns)
  , itsArray2D(rows &gt; maxdim ? maxdim : rows, columns &gt; maxdim ? maxdim : columns)
{
  // Das Objekt direkt initialisieren.
}

// D E S T R U C T O R  for matrixes
template&lt;class temp&gt;
Matrix&lt;temp&gt;::~Matrix()
{
    /*
    Muss man nicht mehr löschen.
    delete itsArray2D;
    itsArray2D = 0;
    */
}

//O P E R A T O R  overloading
template&lt;class temp&gt;
inline temp&amp; Matrix&lt;temp&gt;::operator ()(unsigned int i, unsigned int j)
{
    // Dereferenzierung weg!
    return itsArray2D[i][j];
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614333</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 13 Nov 2008 19:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Programmabsturz (vermutlich Zeigerfehler) bei zugriff auf matrix unter Benutzung der TNT library (Array2D) on Thu, 13 Nov 2008 20:11:53 GMT]]></title><description><![CDATA[<p>wow, scheint alles zu klappen...<br />
recht herzlichen dank <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/1614360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614360</guid><dc:creator><![CDATA[Kleriker]]></dc:creator><pubDate>Thu, 13 Nov 2008 20:11:53 GMT</pubDate></item></channel></rss>