JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=fd5635b410db24b9fd20423d215f34b4Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

eine Array Frage

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 17:14    Titel: eine Array Frage Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.02.2004, 17:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 18:54    Titel: Antworten mit Zitat

Wie würded ihr das coden.
Und ok delet[] habe ich noch vergessen,täte sonst alles stimmen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 04.02.2004, 20:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 06.02.2004, 16:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.02.2004, 16:26    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 06.02.2004, 20:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 06.02.2004, 21:23    Titel: Antworten mit Zitat

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 Wink

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 07.02.2004, 21:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.02.2004, 21:04    Titel: Antworten mit Zitat

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 Wink
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum