Frage zu Funktionsrückgaben (war: Hi.)
-
Kleine Frage.
int func1(int x) { int y = x; return y; } string func2(string line) { string line2 = line; return line2; }
Ich verstehe nicht ganz, wann bzw wann nicht, darf ein returnwert einen Wert zurückgeben und wann nicht? Ich habe irgendwo mal gelesen, das man eine zerstörte variable nicht zurückgeben soll, aber ab wann gilt sie denn als zerstört.
Edit by c.rackwitz: Titel
-
Gott, sogar zu dumm ein Thema zu starten -.-
Das "Hi." sollte eigentlich in den Nachrichtentext. Und der Titel "Frage zu Funktionsrückgaben"
-
bei zeigern und referenzen auf nur in der funktion existierende variablen kracht es. ausnahmen: static sachen.
int *foo(int x) { static int somevar = 0; somevar += x; return &somevar; // okay weil der speicher somevar immer existiert } char *bar(int x) { char dummerstring[1234]; ssprintf(dummerstring, "%d", x); return dummerstring; // boese, weil nach verlassen der funktion der speicher nicht mehr fuer den dummen string reserviert bleibt }
-
Mal nen Beispiel
char * GetText(int index) { // mir nicht bekannt, kenne nur Funktionskopf } int auswahl = 1; char *Text = GetText(auswahl); if (*Text) { puts(Text); }
Das wäre nicht legitm? Klappt aber.
-
nuubiger_nuub schrieb:
Das wäre nicht legitm? Klappt aber.
doch, das ist legitim. wenn gettext aber so aussieht
char * GetText(int index)
{
char t[irgendwas];
return t;
}dann wird die adresse eines lokalen arrays zurückgegeben, und das ist ein fehler, weil das array nach dem verlassen der funktion nicht mehr existiert. resultat: zufällig d.h. es klappt oder nicht oder das programm stürzt ab, oder...
-
nuubiger_nuub schrieb:
if (*Text)...
was soll das denn heissen? lass den stern weg, wenn du den pointer testen willst. mit dem stern pruefst du ja nur das erste zeichen der bezeigten speicherstelle.
-
net schrieb:
doch, das ist legitim.
Zum Verständnis. Wie müsste es denn aussehen das es legitim wäre?
(Natürlich ohne das static)
-
char * GetText(int index) { static char * t[]={"dummerstring1", "dummerstring2", ...}; return t[index]; }
und ohne das static: -ueber malloc zb. -muesstest dann aber selbst fuer die speicherfreigabe sorgen.