<?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[Zugriffsverletzung bei Array]]></title><description><![CDATA[<p>Ich habe ein 1D Array das ich als 2D Array benutze.</p>
<pre><code class="language-cpp">pInput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pOutput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pInput = Beam.GetArray();
	Plot.SetPlotDataAmplitude(pInput);	
	Plot.UpdatePlot();
</code></pre>
<p>soweit klappt alles</p>
<p>pInput bekommt die Daten aus</p>
<pre><code class="language-cpp">CComplex* Laserbeam::GetArray()
{
	return m_Array;
}
</code></pre>
<p>die an Plot weitergerecht werden via</p>
<pre><code class="language-cpp">void CGraphCtrl::SetPlotDataAmplitude(CComplex* InputArray)
{	
	// Get modulo faktor
	CRect rc_dest=GetSize();
	int div = (int)PixelNumber.x/(rc_dest.Width()+1);
	if (div &lt;= 1) { div=1; }

	if  ((PixelNumber.x&gt;0) &amp;&amp; (PixelNumber.y &gt; 0))
	{
		for (int ix=0; ix &lt; PixelNumber.x; ix=ix+div)
		{
			for (int iy=0; iy &lt; PixelNumber.y; iy=iy+div)
			{			
				pPlotData[ArrPos(ix,iy)] = GetColor(InputArray[ArrPos(ix,iy)].amplitude());
			}
		}
	}
}
</code></pre>
<p>und dann auch auf dem Bildschirm angezeigt werden.<br />
Die Übergabe des Arrays scheint also zu funktionieren und es enthält auch Daten.</p>
<p>Wenn ich dann jedoch später den folgenden Aufruf mache</p>
<pre><code class="language-cpp">void CFlickerFreeDemoDlg::OnBnClickedButton1()
{
		FFTW.FFT2D(pInput, pOutput);
...
</code></pre>
<p>dann fliegt das Programm mit</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x00416dcb in FlickerFreeDemo.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x010a0040.</p>
</blockquote>
<p>raus an der Stelle wo an dummy übergeben wird:</p>
<pre><code class="language-cpp">void CFFTW::FFT2D(CComplex* InArray, CComplex* OutArray)
{		
	if (m_Init != true)
		return;	

	for (int ix=0; ix &lt; m_size.x; ix++)
	{
		for (int iy=0; iy &lt; m_size.y; iy++)
		{
			double dummy = InArray[ArrPos(ix,iy)].re;
			in[ArrPos(ix,iy)][0] = InArray[ArrPos(ix,iy)].re;
			in[ArrPos(ix,iy)][1] = InArray[ArrPos(ix,iy)].im;			
		}
	}	
...
</code></pre>
<p>was mache ich anders so dass es hier nicht mehr funktioniert ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182824/zugriffsverletzung-bei-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 06:23:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182824.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 May 2007 16:24:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 16:24:15 GMT]]></title><description><![CDATA[<p>Ich habe ein 1D Array das ich als 2D Array benutze.</p>
<pre><code class="language-cpp">pInput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pOutput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pInput = Beam.GetArray();
	Plot.SetPlotDataAmplitude(pInput);	
	Plot.UpdatePlot();
</code></pre>
<p>soweit klappt alles</p>
<p>pInput bekommt die Daten aus</p>
<pre><code class="language-cpp">CComplex* Laserbeam::GetArray()
{
	return m_Array;
}
</code></pre>
<p>die an Plot weitergerecht werden via</p>
<pre><code class="language-cpp">void CGraphCtrl::SetPlotDataAmplitude(CComplex* InputArray)
{	
	// Get modulo faktor
	CRect rc_dest=GetSize();
	int div = (int)PixelNumber.x/(rc_dest.Width()+1);
	if (div &lt;= 1) { div=1; }

	if  ((PixelNumber.x&gt;0) &amp;&amp; (PixelNumber.y &gt; 0))
	{
		for (int ix=0; ix &lt; PixelNumber.x; ix=ix+div)
		{
			for (int iy=0; iy &lt; PixelNumber.y; iy=iy+div)
			{			
				pPlotData[ArrPos(ix,iy)] = GetColor(InputArray[ArrPos(ix,iy)].amplitude());
			}
		}
	}
}
</code></pre>
<p>und dann auch auf dem Bildschirm angezeigt werden.<br />
Die Übergabe des Arrays scheint also zu funktionieren und es enthält auch Daten.</p>
<p>Wenn ich dann jedoch später den folgenden Aufruf mache</p>
<pre><code class="language-cpp">void CFlickerFreeDemoDlg::OnBnClickedButton1()
{
		FFTW.FFT2D(pInput, pOutput);
...
</code></pre>
<p>dann fliegt das Programm mit</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x00416dcb in FlickerFreeDemo.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x010a0040.</p>
</blockquote>
<p>raus an der Stelle wo an dummy übergeben wird:</p>
<pre><code class="language-cpp">void CFFTW::FFT2D(CComplex* InArray, CComplex* OutArray)
{		
	if (m_Init != true)
		return;	

	for (int ix=0; ix &lt; m_size.x; ix++)
	{
		for (int iy=0; iy &lt; m_size.y; iy++)
		{
			double dummy = InArray[ArrPos(ix,iy)].re;
			in[ArrPos(ix,iy)][0] = InArray[ArrPos(ix,iy)].re;
			in[ArrPos(ix,iy)][1] = InArray[ArrPos(ix,iy)].im;			
		}
	}	
...
</code></pre>
<p>was mache ich anders so dass es hier nicht mehr funktioniert ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294642</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 29 May 2007 16:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 16:56:20 GMT]]></title><description><![CDATA[<p>Genau dasselbe ist es nicht. Für div != 1 gibt es schon eine andere Schrittweite, so dass nicht exakt dieselbe Menge (ix, iy) angesprochen wird. Da ArrPos(ix,iy) die Adresse liefert, ist es wohl am besten, sich die letzten Werte vor dem Crash anzusehen und zu prüfen, mit welchen Werten der Adressbereich von InArray überschritten wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294667</guid><dc:creator><![CDATA[UBr]]></dc:creator><pubDate>Tue, 29 May 2007 16:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 17:28:49 GMT]]></title><description><![CDATA[<p>UBr schrieb:</p>
<blockquote>
<p>Genau dasselbe ist es nicht. Für div != 1 gibt es schon eine andere Schrittweite, so dass nicht exakt dieselbe Menge (ix, iy) angesprochen wird. Da ArrPos(ix,iy) die Adresse liefert, ist es wohl am besten, sich die letzten Werte vor dem Crash anzusehen und zu prüfen, mit welchen Werten der Adressbereich von InArray überschritten wird.</p>
</blockquote>
<p>div ist in dem Beispiel gleich 1 und der Fehler tritt bei (0,0), also dem allerersten aufruf innerhalb der Funktion auf. Ein Wertebereichsfehler sollte daher nicht das eigentliche Problem sein.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294688</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 29 May 2007 17:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 17:41:23 GMT]]></title><description><![CDATA[<p>Die Frage ist dann, welchen Wert ArrPos(0, 0)hat, besonders im Vergleich zur Größe des Feldes InArray - nur als nächste Vermutung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294695</guid><dc:creator><![CDATA[UBr]]></dc:creator><pubDate>Tue, 29 May 2007 17:41:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 18:40:52 GMT]]></title><description><![CDATA[<p>UBr schrieb:</p>
<blockquote>
<p>Die Frage ist dann, welchen Wert ArrPos(0, 0)hat, besonders im Vergleich zur Größe des Feldes InArray - nur als nächste Vermutung.</p>
</blockquote>
<pre><code class="language-cpp">void CFFTW::ArrPos(const int x, const int y)
{
   return y + m_size.y * x;
}
</code></pre>
<p>im Falle von x=y=0 also 0</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294735</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 29 May 2007 18:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Tue, 29 May 2007 19:11:02 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Ich habe ein 1D Array das ich als 2D Array benutze.</p>
<pre><code class="language-cpp">pInput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pOutput = new CComplex[PlotDataSize.x*PlotDataSize.y];
	pInput = Beam.GetArray();
	Plot.SetPlotDataAmplitude(pInput);	
	Plot.UpdatePlot();
</code></pre>
<p>soweit klappt alles</p>
</blockquote>
<p>Nö, hier ist schon ein Problem. pInput &quot;bekommt&quot; keine Daten aus GetArray, du biegst nur den Zeiger um. Durch die Zuweisung des Rückgabewerts von GetArray an pInput ist der Speicher, den du zwei Zeilen darüber angefordert hast, verloren, weil nichts mehr darauf zeigt. Ein klassisches Speicherleck. In der Folge geht's dann wohl in die Hose, weil das, auf das pInput zeigt, nicht so groß ist, wie du glaubst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294751</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 May 2007 19:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Wed, 30 May 2007 06:49:35 GMT]]></title><description><![CDATA[<p>Ich habe es jetzt über ein memcpy gelöst</p>
<pre><code class="language-cpp">Beam.GetArray(pInput);	

void Laserbeam::GetArray(CComplex* OutputArray)
{
	memcpy(OutputArray,m_Array,m_size.x*m_size.y*sizeof(CComplex));
}
</code></pre>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294942</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Wed, 30 May 2007 06:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei Array on Mon, 04 Jun 2007 08:51:45 GMT]]></title><description><![CDATA[<p>Saletti zäme, ond grüezi wohl frau sternimaa...</p>
<p>ok, ich hab diesen zugriffsfehler auch. nur mein problem ist zusätzlich noch, das ich nix davon gecoded habe sondern es nur builden muss...darum ist es doppelt so müehsam. and that's the piont when you came on the plan!<br />
ich kenn mich mit dem Visual C++ 2005 Express noch nicht so aus...ich weiss nur, das man ergendwie das programm auch im speicher verfolgen kann wenn man am debuggen ist. weiss jemand wie das geht...an sonsten könnt ihr mir auch direkt helfen wenn ihr wirklich nichts besseres zu tun habt! <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>hier spuckt er den fehler aus:</p>
<pre><code class="language-cpp">#ifndef WITHOUT_LOG4
      if(mLogServ==0) {
         char *logFileName = getenv(LOG_FILE);
         if(logFileName==NULL) {
            logFileName=NX_LOG_FILE_NAME;
         }
         log4::File logFile(logFileName);  //&lt;--  Hier kommt der zugriffsfehler!
         log4::PropertyConf::configureAndWatch(logFile, 3000);
         mLogServ = new LogServ();
      }
      log = new Log4();
</code></pre>
<p>hier noch der konstruktor von &quot;File&quot; im header file:</p>
<pre><code class="language-cpp">class LOG4CXX_EXPORT File
                {
                public:
                    File();
                    File(const std::string&amp; name);
</code></pre>
<p>fehlermeldung:<br />
Unbehandelte Ausnahme bei 0x760823a6 in terminalCOMP.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcccccccc.</p>
<p>falls einer ne idee hat wär ich froh...sont tüftle ich weiter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298244</guid><dc:creator><![CDATA[tom*EF]]></dc:creator><pubDate>Mon, 04 Jun 2007 08:51:45 GMT</pubDate></item></channel></rss>