INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Problem beim Verwenden von 2D Arrays



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.03.2008, 21:04
Beitrag #35

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Problem beim Verwenden von 2D Arrays
' schrieb:BildP=0;
Das ist ein ganz böser Fehler.
Da hiermit ein Zugriff in der Art "Sum += (int)*BildP" stattfindet, wird das garantiert eine Zugriffsverletzung geben. Du greifst damit auf die Adresse 0 im Datensegment zu. Du willst aber nicht auf 0 zugreifen, sondern auf den Start des Bildarrays. 0 ist zwar der relative Start im Bildarray, tatsächlich zugreifen musst du aber auf eine absolute Adresse im Datensegment. Und die ist nunmal das da: "BildP = (*Bild)->arg1;" (davon gehe ich aus. Ob es tatsächlich so ist, weiß ich nicht. Würdest du die Daten per "Zeiger auf Daten" an die DLL übergeben, Wäre genau dieser Zeiger der Wert von BildP).

"Sum += (int)*BildP" ist auch noch doppelt-doppelt-gemoppelt: Sum und *BildP sind - laut Definition - double. Da nützt dir das (int) gar nichts. Der Kompiler macht trotzdem wieder double draus. Und außerdem: Sind die Bilddaten nicht in U8? Dann muss *BildP aber U8 sein!

Code:
MeanImP=&MeanIm[0];
Das ist nicht ganz falsch - aber auch nicht richtig.
Du hast MeanImP als 2D-Array angelegt. Und das auch noch in kompliziertester Form. &MeanIm[0] ist NICHT ein Pointer auf Datenspeicher, sondern ein Pointer auf einen Pointer auf Datenspeicher (double ** MeanImWink
Wenn ich das richtig verstanden habe, generierst du mit callocmatrix nämlich soviele Pointer wie die Matrix Spalten hat. Warum erzeugst du ein so kompliziertes Array, wenn du dann sowieso nur mit MeanImP++ darauf zugreifst? Mach halt ein 1D-Array "calloc(Länge*Breite)".

[*grübel*]

Mit dem Datentyp "double ** MeanIm;" kannst du NICHT mittels MeanImP++ oder ähnlich von einer Zeile auf die nächste springen. Der Zeiger auf die Erste Zeile steht in MeanIm[0]. Der Zeiger auf die Zweite Zeile steht in MeanIm[1]. Also: Poiner auf Zeil X steht in MeanIm[X-1]; Willst du jetzt also von Zeile Eins zur Zeile zwei musst du den Pointer aus MeanIm[1] auslesen. Mit anderen Worten: Es ist nicht zwingend gesagt, dass in einem Array double** die Daten hintereinander stehen!


Code:
MeanImP=&MeanIm[0];
MeanImP=0;
Wieso machst du hier beide Zuweisungen? Die letztere ist auf jeden Fall falsch. Auch das mit KontrastP=0 ist falsch.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Problem beim Verwenden von 2D Arrays - IchSelbst - 07.03.2008 21:04

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Fehler 1097 beim Übergeben von Arrays Flemmy 4 9.510 22.10.2017 21:07
Letzter Beitrag: rolfk
  Problem beim Einbinden einer DLL preacha 18 17.755 25.09.2008 11:51
Letzter Beitrag: baliik

Gehe zu: