Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fehler bei Speicher allokieren??

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.06.2005, 14:52 Uhr
JohnSilver



Aloha:

kann mir vielleiucht jemand sagen, was ich hier falsch mache:


C++:
func(byte Text, int test, byte bytes)
{
  byte *ptr = NULL;
  Data *ptrdata;
  int i = 0;
  int ret = 0;  

ptr = (byte *) malloc(bytes*sizeof(int));
ptrdata = (Data *) malloc(bytes*sizeof(inz));

if(ptr = NULL)
{
  ret = -1;
}

else
{
    for (i;i<bytes;i++)
    {
      ptr[i] = Text+i; => hier bricht das Programm beim debuggen ab!!
    }
}



Hab' ich da vielleicht was mit dem malloc falsch gemacht?????
Danke im voraus

mod edit: benutze cpp Tags selber!

Dieser Post wurde am 27.06.2005 um 15:07 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2005, 15:10 Uhr
Pablo
Supertux
(Operator)


Ich denke, dass `byte` und `Data` eigene Strukruren sind, dann müsstest du folgendes haben:


C++:
ptr =  malloc(bytes*sizeof(byte));
ptrdata = malloc(bytes*sizeof(Data));


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2005, 15:10 Uhr
Tommix



Hallo,

C++:
if (ptr == NULL) // doppeltes =


ein sehr beliebter Fehler

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2005, 15:25 Uhr
~JohnSilver
Gast


Naja irgendwo ist der Wurm drin... naja werde mir das jetzt mal näher anschauen...

kann mir vielleicht noch jemand sagen wie ich die Größe eines Arrays variabel gestalten kann, z.B. wenn ich in eine Funktion einen Wert übergeben bekommen, nachdme sich die Arraygröße, die in der Funktion bestimmt wird, richtet:

func(int arraygr)
{
int array[arraygr]; => geht nicht... wie geht's richtig??


Danke im voraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.06.2005, 15:49 Uhr
virtual
Sexiest Bit alive
(Operator)


@Johnsilver

1. Also die erste Option ist, mal zu schauen, ob Dein Compiler den C Standard von 1999 unterstützt, da kann man das nämlich so machen, wie du willst. Oft ist es aber so, daß die C99 Features erst dann aktiv sind, wenn man entsprechende Compiler flags setzt. Bei gcc geht es 100%, den meisten nativen unix Compilern ebenfalls.

2. Die zweite Option ist alloca zu verwenden. Ist nicht auf wirklich allen Systemen vorhanden, aber auf fast allen, leider aber nicht Standard:

C++:
#include <alloca.h>

int func(int arragr) {
   int* array = alloca(arraygr*sizeof(*array));
   ...
}


Der Vorteil von alloca gegenüber malloc /new[] ist, daß Du dich nicht um die Speicherfreigabe kümmern brauchst.

3. Oder du nimmst new[] bzw. malloc (C++ bzw. C):


C++:
// C++
int func(int arragr) {
   int* array = new int[arraygr];
   ...
   delete []  array;
}
// C
int func(int arragr) {
   int* array = malloc(arraygr*sizeof(int));
   ...
   free(array);
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: