Du bist nicht angemeldet.

Werbeanzeige

Anonymous

unregistriert

1

07.10.2005, 21:00

Probleme mit Array initialisierung, stehe auf dem schlauch

Hi,

Also erstens: Ich habe ein Bytearray als membervariable in einer Klasse deklarier, da ich die größe aber erst beim Initialsieren weiß, bekomme ich immer einen Fehler, weil ja das Array 0 ist. wie sollte ich das machen?

Zweitens: Ich möchte 10 Strings speichern und dies in einem Array, wie soll ich das machen? geht das in einem Mehrdimensionalen Array?
Wenn ja ist es so richtig? Array[10][256]???

Bitte helft mir, danke

koschka

Community-Fossil

Beiträge: 2 863

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

07.10.2005, 21:36

Ja der ansatz ist schon richtig.

C-/C++-Quelltext

1
char pStringTable[10][256]


aber wenn du die Größe erst bei der Initialisierung weisst, musst du das mit dynamischen Arrays machen.

C-/C++-Quelltext

1
2
3
4
5
// Speicher anfordern

pStringtable = new char[uiMembers * 256];

// Speicher nach Verwendung wieder freigeben

delete[] pStringtable;

rewb0rn

Supermoderator

Beiträge: 2 873

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

07.10.2005, 23:50

Ach dummer Gedanke wegeditiert^^

rewb0rn

Supermoderator

Beiträge: 2 873

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

4

07.10.2005, 23:54

Müsste das zweite Beispiel nicht heißen

C-/C++-Quelltext

1
pStringtable = new char[uiMembers][256]

? Weil woher weiß der Compiler sonst, wie die Aufteilung bei mehrdimensionalen Arrays ist? Ich kanns allerdings nicht mit Sicherheit sagen, weil ich mach es immer mit Doppelpointern. Ist zwar im Prinzip das gleiche, aber es sieht n bisschen anders aus.

koschka

Community-Fossil

Beiträge: 2 863

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

07.10.2005, 23:59

Es geht auch so. Ist aber quatsch.

Du willst speicher von dem jeder 256 Zeichen lang ist, davon willst du x Stück, also x*256.
Du willst doch nur eine Adresse in der du x*256 Daten reinpacken kannst. Ob das nun mehrdimensional ist interessiert doch nicht.

rewb0rn

Supermoderator

Beiträge: 2 873

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

6

08.10.2005, 00:09

Ja ist mir klar. Aber woher weiß der Compiler dann, ob aufgeteilt wird Array[10][256] oder Array[2560] oder Array[20][128]? Wie gesagt ich weiß es nicht, deswegen frag ich.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

08.10.2005, 00:12

2D Array abgebildet auf 1D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T, unsigned long rows, unsigned long cols> class array2d
{ 
public: 
    array2d  (void) {} 
    ~array2d (void) {} 

    inline T* operator[] (unsigned long line) 
    { return (&data_[line * cols]); } 

private: 
    T data_[rows*cols]; 
};

array2d<unsigned long, 20, 10> array;

array[2][5] = 444;
array[2][3] = 333;
Easy? easy.

koschka

Community-Fossil

Beiträge: 2 863

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

8

08.10.2005, 00:18

@Patrick, das trifft aber nicht den Kern.

Ich denke, das er speicher brauch, wenn er etwas initialisieren will. Also muss er dynamischen Speicher anfordern, das funktioniert mit deiner Methode nicht.

@Spike ganz einfach:

C-/C++-Quelltext

1
2
3
4
5
6
7
    char* pArray = new [(32+1)*5];

    
    for(int i = 0; i < 5; i++)
    {
        strcpy(pArray[i*33], "hello");
    }

rewb0rn

Supermoderator

Beiträge: 2 873

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

9

08.10.2005, 00:20

Also wäre folgender Code gültig?

C-/C++-Quelltext

1
2
char Array[10][256];
Array[19][127] = "\0"; //letztes Element

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

10

08.10.2005, 00:22

Zitat von »"Spik)evil("«

Also wäre folgender Code gültig?

C-/C++-Quelltext

1
2
char Array[10][256];
Array[19][127] = "\0"; //letztes Element

Werbeanzeige