Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Dynamisches Feld aus Funktion zurückgeben...

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
06.11.2003, 14:19 Uhr
m3talgod



Hallo Leute,

bin neu in diesem Forum, ich weiß auch, daß das ein Standardproblem
ist, aber alle Lösungen dieses Problems haben malloc oder calloc
zur Speicherreservierung benutzt. Konkret gehts um folgenden Code:


C++:
#include <iostream.h>

void test(char* x)
{
    x = new char[5];
    x = "TEST\0";
}

main()
{
    char* c;
    test(c);    
    cout << c;
    delete[] c;
}



Ist es überhaupt möglich, ein mit new[] erzeugtes Feld zurückzugeben
und außerhalb der Prozedur freizugeben??
Der obige Code erzeugt eine Exception.
Hab schon gegoogelt und dieses Forum durchsucht aber nichts gefunden.
Danke für eure Hilfe

--edit: Pablo. [ cpp ] tags gesetzt --

Dieser Post wurde am 06.11.2003 um 19:24 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.11.2003, 14:22 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich vermute mal das du das so meintest

C++:
#include <iostream>

void test(char* &x)
{
    x = new char[5];
    sprintf(x,"%s","TEST");
}

main()
{
    char* c;
    test(c);    
    std::cout << c;
    delete[] c;
}



kann ich allerdings nicht empfehlen so zu verwenden
nimm lieber std::string oder ein grossen char[]-buffer
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.11.2003 um 14:24 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.11.2003, 14:34 Uhr
m3talgod



Aha,

danke für die schnelle Antwort, wo liegt denn jetzt mein Fehler? Also du hast jetzt eine Referenz auf einen Zeiger als Funktionsparameter genommen,
ist eigentlich logisch!
Muß ich sprintf benutzen, um mein dynamisches Feld zu füllen? Geht das nicht einfach mit einer Zuweisung??

Ob das jetzt std::cout oder nur cout ist, dürfte doch egal sein?
Bei mir funktioniert normalerweise auch nur cout << "bla";
Hat das was mit den Namespaces zu tun?

EDIT: Das Beispiel hab ich jetzt vereinfacht, normalerweise fülle ich das dyn.
Feld in einer Schleife über den Index, als letztes eine '\0'.

Dieser Post wurde am 06.11.2003 um 14:42 Uhr von m3talgod editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.11.2003, 14:45 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was du nicht machen kannst ist

C++:
x = "TEST\0";


weil x nur ein zeiger ist deshalb sprintf um den speicher auf den x zeigt zu "füllen"
wenn du ohne referenz allokiert hättest wäre folgendes passiert
es wird ein kopie von dem zeiger auf dem stack angelegt. dieser weisst du den neuen speicher zu. Am ende vom test wird diese kopie gelöscht. das heisst du hast den speicher allokiert und der hängt dann irgendwo verloren rum ohne das du noch nen zeiger drauf hast. Deswegen als referenz.

ja hat was mit dem namespaces zu tun.
wenn du nur

C++:
#include <iostream>


musst du std noch expliziet mit angeben

bei

C++:
#include <iostream>
using namespace std;


musst du es nicht

die headers mit .h am ende sollte man nicht mehr verwenden.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.11.2003, 15:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Ist es überhaupt möglich, ein mit new[] erzeugtes Feld zurückzugeben
und außerhalb der Prozedur freizugeben??


ach so wie du gesehen hast ist das möglich solltest du aber tunlichst vermeiden. Das provoziert ja gerade zu speicherlöcher
--
...fleißig wie zwei Weißbrote
 
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: