JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

:( Zeiger als Rückgabewert

 
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: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 10:03    Titel: :( Zeiger als Rückgabewert Antworten mit Zitat

Hallo
Ich kann mir nicht helfen aber ich find den Fehler einfach nicht ;(
Aber ihr findet ihn bestimmt sofort wäre ja NORMAL nicht so schwer

CPP:
#include <stdio.h>

int* versuch()
{
   int test[2];
   test[1] = 5;
   test[2] = 8;
   
return test;
};

int main()
{
int* probe;
   
   probe = versuch();

   printf("%d",probe[1]);
   
return 0;
}


Thx schon im Voraus
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Blubb-Tec
JLI'ler


Alter: 34
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 10:08    Titel: Antworten mit Zitat

also, meiner meinung nach, soll die funktion int* Versuch, ja einen Zeiger vom Typ Integer zurückgeben, gibt aber nur eine Integer Variable zurück, ich meine es müsste:

CPP:
 return &test;


heissen, oder du legst test mit new an, dann könntest du test zurückgeben

bin mir aba nich sicher, ich übernehm keine Verantwortung Wink[/code]
_________________
www.planlos.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 10:14    Titel: Antworten mit Zitat

Danke fuer die rasche Antwort

hat aber leider nicht Funktioniert das mit return &test;

aber lieg ich da richtig.
Bei einem Array ist der Namen (test) gleich die anfangs Adresse.
Also test = &test[0]
Und wenn das so richtig ist dann mueste doch die funktion die anfangsadresse zurückgeben.
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jonathan_Klein
Living Legend


Alter: 38
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 11:20    Titel: Antworten mit Zitat

du erstellst eine lokale Variable und gibts einen Zeiger auf die Zurück das ist leider falsch, den die Variable wird gelöscht werdne wenn die Funktion vorbei ist, somit ist der Zeiger ungültig. Du musst das Array mit new erstellen und mit delete löschen damit das funktionieren kann.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 39
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 11:22    Titel: Antworten mit Zitat

das kann gar nicht funktionieren
Merke: Gieb niemals den zeiger einer lokalen varible zurück, wenn dann musst du das so machen

CPP:
int* versuch()
{
   int* test = new int[2];
   test[1] = 5;
   test[2] = 8;
   
return test;
};

int main()
{
int* probe;
   
   probe = versuch();

   printf("%d",probe[1]);

//nicht vergessen, Speicher freigeben
delete[] probe;
   
return 0;
}


eidt: sorry hab was vertauscht
edit2: jetzt aber Wink
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 38
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 11:25    Titel: Antworten mit Zitat

genauso meinte ich das.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 11:51    Titel: Antworten mit Zitat

Danke das war der Fehler

Aber wenn ich das array einfach als static deklaire mueste es doch auf funktionieren oder nicht.
Denn dann bleibt es auch beim beenden der Funktion erhalten.

THX
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 12:03    Titel: Antworten mit Zitat

Dragon hat Folgendes geschrieben:
das kann gar nicht funktionieren
Merke: Gieb niemals den zeiger einer lokalen varible zurück, wenn dann musst du das so machen

CPP:
int* versuch()
{
   int* test = new int[2];
   test[1] = 5;
   test[2] = 8;
   
return test;
};


das verursacht zwar keinen Error(wegen dynamisch), is aber trotzdem falsch Wink

Bevor jetzt einer den Fehler rumposaunt, versuch erstmal selber draufzuzkommen Dragon. Dann machst du den bestimmt net nochma(learning by doing)

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
abc_d
JLI Master Trainee


Alter: 35
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 12:15    Titel: Antworten mit Zitat

Dragon: Schäm dich Wink
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 07.07.2005, 12:50    Titel: Antworten mit Zitat

CPP:
int *versuch()
{
  static int test[2];
  test[0] = 5;
  test[1] = 8;
   
  return test;
}

_________________
"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
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 13:10    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
CPP:
int *versuch()
{
  static int test[2];
  test[0] = 5;
  test[1] = 8;
   
  return test;
}


du bist gemein Crying or Very sad Jetzt wird er den Fehler immer wieder machen.

*beleidigt_PhotonenLaser_aufheb_und_Fallen_suchen_geh*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 07.07.2005, 13:12    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:
FallenAngel84 hat Folgendes geschrieben:
CPP:
int *versuch()
{
  static int test[2];
  test[0] = 5;
  test[1] = 8;
   
  return test;
}


du bist gemein Crying or Very sad Jetzt wird er den Fehler immer wieder machen.

*beleidigt_PhotonenLaser_aufheb_und_Fallen_suchen_geh*


Sollte er sich den Code genauer ansehen dann wohl nicht. Tip: Arrayindex beachten.
_________________
"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
Dragon
Super JLI'ler


Alter: 39
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 07.07.2005, 17:05    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:
Dragon hat Folgendes geschrieben:
das kann gar nicht funktionieren
Merke: Gieb niemals den zeiger einer lokalen varible zurück, wenn dann musst du das so machen

CPP:
int* versuch()
{
   int* test = new int[2];
   test[1] = 5;
   test[2] = 8;
   
return test;
};


das verursacht zwar keinen Error(wegen dynamisch), is aber trotzdem falsch Wink

Bevor jetzt einer den Fehler rumposaunt, versuch erstmal selber draufzuzkommen Dragon. Dann machst du den bestimmt net nochma(learning by doing)

Gruß DirectXer


ich hab den fehler schon gesehen, aber ich denke nicht einmal daran den rauszunehmen, ich hab nur den Quelltext kopiert und angepasst, so wie er es wollte Wink
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
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