Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 04.02.2004, 17:14 Titel: eine Array Frage |
|
|
Hallo
Ich versuchte eine Memberfunktion zu machen mit der ich ein Array Feld um eins erweitern kann.
Meine Frage lautet stimmt mein code oder schreibe ich auf unreservierten speicher.
Denn bei einen überlauf meines Arrays funktioniert es trotzdem noch.
#include<stdio.h>
class florian
{
public:
void SetNewInt();
int* wert;
int anzahlwert;
};
void florian::SetNewInt()
{
int* zwert;
zwert = new int[anzahlwert++];
wert = zwert;
};
int main()
{
florian zahl;
zahl.anzahlwert = 0;
zahl.SetNewInt();
zahl.wert[0] = 3;
printf("%d",zahl.wert[0]);
return 0;
}
Vieleicht geht das auch einfacher oder anderst bitte melden.
Ich weiß auch das es mit STL geht aber ich möchte erst mal das Problem mit den Arrays lösen.
Danke |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.02.2004, 17:32 Titel: |
|
|
Code: |
int* zwert;
zwert = new int[anzahlwert++];
wert = zwert;
|
Du reservierst Speicher ohne den alten wieder freizugeben oder zu übernehmen. Das ist keine gute Idee. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 04.02.2004, 18:54 Titel: |
|
|
Wie würded ihr das coden.
Und ok delet[] habe ich noch vergessen,täte sonst alles stimmen |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 04.02.2004, 20:35 Titel: |
|
|
ich würde das gar nicht wirklich selbst coden sondern z.b. std::vector nehmen, oder list/map/usw.
Aber wenn du das selbst programmieren möchtest, dann würde ich vor
wert = zwert;
die alten elemente aus wert nach zwert kopieren. |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 06.02.2004, 16:05 Titel: |
|
|
Das habe ich jetzt versucht aber es funktioniert nicht denn es kommt beim Ausführen immer eine Fehlermeldun(bezüglich den Speicherzugrif)
mein code:kann mir jemand den Fehler sagen
#include<stdio.h>
class florian
{
public:
void SetNewInt();
int* wert;
int anzahlwert;
};
void florian::SetNewInt()
{
int* zwert;
zwert = new int[++anzahlwert];
for( int i= 0;i<anzahlwert;i++)
{
zwert[i] = wert[i];
};
wert = zwert;
anzahlwert++;
};
int main()
{
florian zahl;
zahl.anzahlwert = 1;
zahl.SetNewInt();
zahl.wert[0] = 3;
printf("%d",zahl.wert[0]);
return 0;
} |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.02.2004, 16:26 Titel: |
|
|
Hallo,
besonders
Code: |
for( int i= 0;i<anzahlwert;i++)
{
zwert[i] = wert[i];
};
wert = zwert;
anzahlwert++;
|
macht keinen Sinn, da wert auf keinen gültigen Speicher zeigt. Was willst du überhaupt erreichen?
C. |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 06.02.2004, 20:49 Titel: |
|
|
Hallo ich möchte ein Array um eins erweitern
wert bekomm den Zeiger mit wert = zwert denn zwert wird vorher reserviert.Mit der For schleife möchte ich erreichen das wenn ein Arraya mit Werte schon gefüllt ist un nun um ein erweitert wird nachher auch noch die Werte enthält + den Neuen Arrayindex
Stimmt das so oder wird das anders gemacht |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.02.2004, 21:23 Titel: |
|
|
Das geht nicht so einfach. Probiere mal folgendes:
Code: |
class FloArray
{
public:
FloArray() : m_arr(NULL), m_Anzahl(0)
{
}
void Set(int index,int Wert)
{
if(m_arr && index < m_Anzahl)
{
m_arr[index] = Wert;
}
}
void Output(void)
{
for(int i=0;i<m_Anzahl;i++) printf("%d\n",m_arr[i]);
}
void CreateArr(int Anzahl)
{
int* arr = new int[Anzahl];
if(m_arr)
{
for(int i=0;i < (Anzahl < m_Anzahl ? Anzahl : m_Anzahl);i++)
{
arr[i] = m_arr[i];
}
delete[] m_arr;
}
m_arr = arr;
m_Anzahl = Anzahl;
}
protected:
int m_Anzahl;
int* m_arr;
};
int main()
{
FloArray foo;
foo.CreateArr(2);
foo.Set(0,1);
foo.Set(1,2);
foo.Output();
foo.CreateArr(3);
foo.Set(2,3);
foo.Output();
}
|
Habe nicht getestet, sieht aber gut aus
C. |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 07.02.2004, 21:36 Titel: |
|
|
Hallo ich habe mich jetzt doch für die stl Libary entschieden.
Aber da ich noch nichts mit vector gemacht habe kann mir vieleicht jemand zeigen wie ich das Problem mit vector lösen könnte
Danke im Voraus |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.02.2004, 21:04 Titel: |
|
|
Mit vector machst du das so:
Code: | #include <vector>
std::vector<variablentyp> foo; |
Mit folgendem Code kannst du dem vector ein Element hinzufügen:
Code: | foo.push_back(variable); |
PS: Ein Semikolon braucht man nach einer for-Schleife nicht
Florian hat Folgendes geschrieben: | for( int i= 0;i<anzahlwert;i++)
{
zwert[i] = wert[i];
};
wert = zwert;
anzahlwert++;
}; |
_________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|