Array anlegen

@Holger:

Deine Spalten sind noch nicht allokalisiert...

Versuch mal folgendes:
Code:
      6         unsigned char **image;
      7         image = new unsigned char*[SIZE];
      8 
      9         for(int i = 0; i < SIZE;i++){
     10                 *(image + i) = new unsigned char[SIZE*SIZE];
     11         }

@squeaker

Deine Größen sind vielleicht konstant zur Laufzeit - können sich aber von Lauf zu Lauf ändern bzw. von Funktionsaufruf zu Funktionsaufruf.

Also das macht doch nix, weil wenn ein neuer Funktionsaufruf erfolgt, exisitiert das alte Array doch eh nicht mehr es wird ein neues angelegt welches für seine Lebensdauer
wieder statisch ist.
Wegoptimiert heisst, dass der Code nicht in die exe geschrieben wurde, da der Compiler festgestellt hat, dass er nie ausgeführt wird.

Also bei mir existiert das Binary nach dem Kompilieren und es lässt sich ausführen und debuggen...

Gruß

RedWing
 
Original geschrieben von RedWing
@Holger:
Also bei mir existiert das Binary nach dem Kompilieren und es lässt sich ausführen und debuggen...

RedWing

Das habe ich nicht bezweifelt - aber ist auch der Code drin, den du geschrieben hast, sprich wird da wirklich der Array angelegt. Ein Compiler kreiert immer ein Binary - und sei es nur ein push 0 und der Call für das Beenden des Programms.
 
mach's mal so:

Code:
unsigned char **image;
image = (unsigned char **) malloc(spalten *sizeof(unsigned char*) ); 

for (int i =0; i < spalten; i++)
{
  image[i] = (unsigned char*) malloc(zeilen * sizeof(unsigned char));
}

so mach ich das immer und so geht's. die verteilung ist dann:
image[spalten][zeilen]
Wenn du es andersrum haben willst, musst du halt die Variablen vertauschen.

freigeben dann analog:
Code:
for (int i = 0; i < spalten;i++) free(image[i]);
free(image);
 
Du hast recht der Methodendeinfition + aufruf von initArray exisitiert zwar aber auf das Feld kann ich nicht zugreifen(im Debugger).
Aber ich sehe trotzdem nicht was an folgender Lösung dirty bzw zu einem Fehler führen sollte und wieso das kein statisches Feld innerhalb der Methode sein sollte?

Code Example:

Code:
      1 #include <iostream>
      2 
      3 using namespace std;
      4 void initArray(const int a, const int b){
      5         char feld[a][b];
      6 
      7         for(int i = 0; i < a; i++)
      8                 for(int j = 0; j < b; j++)
      9                         feld[i][j] = 'a';
     10         cout << feld[3][3] << endl;
     11 }
     12 int main(void){
     13 
     14         initArray(5,5);
     15 }


Gruß

RedWing
 
Also ich komme vom Java-Programmieren, und da ist es doch so einfach ein zwei-oder drei- oder n-Dimensionales Array anzulegen.

Jetzt muss ich aber leider mit C++ programmieren.
Jetzt habe ich dank der http://www.pixelate.co.za/issues/12/articles/dynamicarrays/dynamicarrays.html mitbekommen, wie man das in C++ bzw. C machen muss.

Da ich konsequent jedes C-Stil Programmieren vermeide werde ich bestimmt nicht mit malloc arbeiten!

Jetzt habe ich einen lauffähigen C++ Code geschrieben:
Code:
	unsigned char **image;
	image = new unsigned char*[spalten];
	for(zeile = 0; spalte<spalten; spalte++)
	{
		image[spalte] = new unsigned char[zeilen];
	}

	for(zeile = 0; zeile<zeilen; zeile++)
	{	
		for(spalte = 0; spalte<spalten; spalte++)	
		{
			farbwert = input[zeile * spalten + spalte];
			image[spalte][zeile] = farbwert;						
		}

	}
Fast hätte ich natürlich noch vergessen den Speicher wieder freizugeben, aber das mache ich natürlich auch noch! - Wie gut, dass es in Java einen Garbage-Collector gibt!

Danke an alle für Eure Mühe! :)

C sux!
 
Entschuldige - aber es war nicht klar ob C oder C++ programmiert werden soll.

Mit new sollte man aber auch ein 2dimensionales Array anfordern können, oder?
 
Zurück