Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Speicherplatz mit new reservieren

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
07.12.2006, 11:16 Uhr
Soto



Hallo,
folgendes Ziel hätte ich:
- einen Zeiger an eine Funktion übergeben und
- innerhalb dieser Funktion Speicherplatz mit new reservieren lassen und
- den Zeiger auf diesen Speicherplatz zeigen lassen

Leider klappts nicht. Sobald ich die Funktion verlassen habe, ist der Speicherplatz wieder weg. Kann man da was ändern, gibts eine Methode wie ich mein Ziel noch erreichen kann?


C++:
#include <iostream>

using namespace std;

void func(double* m) {

    m = new double(4.0);
    cout << m << "\n";
}

int main (void) {

  double* n = NULL;

  func(n);

  cout << *n << "\n"; // funktioniert nicht - "Speicherzugriffsfehler"

  
  return 0;
}



Edit: Natürlich ist das Ganze mit double-Werten sinnlos, letztlich soll es mit void-Pointern funktionieren, ich habe aber double-Pointer gewählt damit der Code auf das Wesentliche reduziert wird, nämlich die Freigabe von Speicherplatz innerhalb einer Funktion
--
ich versuche zu helfen, sorry wenn ich nen scheiß rede ^^

Dieser Post wurde am 07.12.2006 um 11:21 Uhr von Soto editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.12.2006, 11:19 Uhr
Pler
Einer von Vielen
(Operator)


Du brauchst ein Zeiger auf den Zeiger.
Denn der Zeiger ändert sich ja (wahrscheinlich) beim new.

C++:
void func(double **m) {

    *m = new ...
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.12.2006, 11:23 Uhr
Soto



wow, damit funktionierts - super, vielen dank!
--
ich versuche zu helfen, sorry wenn ich nen scheiß rede ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.12.2006, 11:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Denn der Zeiger ändert sich ja (wahrscheinlich) beim new.


Nein der Grund ist, das die Prozedur intern nicht mit dem übergebenen Zeiger arbeitet, sondern mit einer Kopie. Wenn ich die Kopie auf den mit new allokierten Speicher zeigen lasse, hilft mir das wenig, wenn die Kopie nach Prozedurdurchlauf nicht mehr existiert....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.12.2006, 11:29 Uhr
Pler
Einer von Vielen
(Operator)


Ja, und wo ist da jetzt der Unterschied zu meiner Aussage?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.12.2006, 11:35 Uhr
ao

(Operator)



Zitat von Windalf:

Zitat:

Denn der Zeiger ändert sich ja (wahrscheinlich) beim new.


Nein der Grund ist, das die Prozedur intern nicht mit dem übergebenen Zeiger arbeitet, sondern mit einer Kopie.

Ich glaube, ihr meint dasselbe. Der Fehler ist, dass der Zeiger by-value übergeben wurde -> lokale Kopie. Eine Übergabe by-reference wäre richtig, dann hätte die Änderung Wirkung nach außen.

Dabei fällt mir ein, wie wärs hiermit? Hab ich noch nie benutzt, müsste aber doch auch gehen, oder?

C++:
void func(double*& m)  // <--- Referenz auf Pointer
{
    m = new double(4.0);
    cout << m << "\n";
}

int main (void)
{
  double* n = NULL;
  func(n);
  cout << *n << "\n";
  return 0;
}


ao

Dieser Post wurde am 07.12.2006 um 11:36 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.12.2006, 11:35 Uhr
Soto




Zitat von Pler:
Ja, und wo ist da jetzt der Unterschied zu meiner Aussage?


Nach deiner Aussage hab ich verstanden wo das Problem liegt, nach Windalfs Aussage hab ich verstanden wieso die Lösung hinhaut ^^

Also thx euch für Hilfe
--
ich versuche zu helfen, sorry wenn ich nen scheiß rede ^^
 
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: