Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » speicher Fehler bei std::string

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
20.12.2004, 11:27 Uhr
~Jonas
Gast


Hi leute,
mal ne wirklich schwere Frage:
Ich rufe eine Function auf die Ich nicht selber geschrieben habe, sondern die an meine Klasse vererbt wird. Diese Function gibt einen std::string zurück. Geht auch, jedoch sowie ich aus meiner function rausgehe bekomme ich einen Speicherfehler : Invalid HeapPointer. Rufe ich die Function die mir vererbt wurde auf ohne den wert entgegnzunehmen bekomme ich den gleichen Fehler(also nur durch den aufruf, dabei ist der Wert den ich zurück bekomme brauchbar). Wenn ich den wert nun in ner Variablen annehme also std::string test = format() und dann die function test.allocator() aufrufe sagt mein compiler mir:

*****error C2248: "allocator" : Kein Zugriff auf protected Element, dessen Deklaration in der Klasse "std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >" erfolgte******
Was kann ich machen? Wo liegt der Fehler?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.12.2004, 11:34 Uhr
virtual
Sexiest Bit alive
(Operator)


Das allocate() ist nicht für Dich zugreifbar, das sagt die letzte Meldung.

Dein Invalid Heap Pointer mag daher kommen, daß du spezielle Linkerflags auf deinm Compiler (VC?) setzen mußt...

Ohne Code nix los.
--
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
002
20.12.2004, 11:52 Uhr
~Jonas
Gast



Zitat:
Dein Invalid Heap Pointer mag daher kommen, daß du spezielle Linkerflags auf deinm Compiler (VC?) setzen mußt...


Welche Linkerflags muß ich den setzen? Und wo setze ich die? VC++

C++:
char *cFormat=new char[12];
            char *cFormatString = new char[1024];
            std::string strFormat;
    
//format();    sofortiger absturz
            strFormat = format();
            
            if (strcmp(ImageTyp,"SAS")==0)
            {
            if (strcmp(strFormat.c_str(),tifFormat)==0);
                strcpy(cFormat,"tif");
            if (strcmp(strFormat.c_str(),jpgFormat)==0);
                strcpy(cFormat,"jpg");
            }
            else
                strcpy(cFormat,ImageTyp);

return true;  //absturz

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.12.2004, 12:07 Uhr
(un)wissender
Niveauwart


Tja, was tut den format()...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.12.2004, 12:11 Uhr
~Jonas
Gast


Tja, gute Frage! Eigentlich mir nen String zurückgeben. z.B."Joint Photographic Experts Group JFIF format". Hab die function aber wie gesagt nicht geschrieben sondern benutze sie nur! Hab nämlich ne Vererbung von einer anderen Klasse gemacht und nutze die Function mit! Die function format() ist leider in ner DLL damit kann ich sie mir auch nicht anschauen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.12.2004, 12:21 Uhr
(un)wissender
Niveauwart


Du must zumindest die Signatur im Header (inkl. Beschreibung) haben. Das sollte schon helfen, vorausgesetzt die Funktion arbeitet korrekt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.12.2004, 12:26 Uhr
~Jonas
Gast


Soll ich dir die Header-Datei mal schicken?
Das einzige was da steht ist:

C++:
// Long image format description
std::string format (void) const;


Kann es was mit dem const am ende zu tun haben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.12.2004, 13:12 Uhr
Bruder Leif
dances with systems
(Operator)


Wenn ich an die DLL denke, kommt mir das große Zittern. STL-Klassen wie std::string sind eben Klassen, und was eine Klasse ist, da hat jeder Compiler seine eigene Vorstellung von. Insbesondere was die Implementierung der STL angeht. Jetzt haben wir vielleicht eine DLL, die mit Borland C++ erzeugt wurde und die Borland-Version eines std::string zurückgibt, und das Hauptprogramm wird in Visual C++ compiliert und erwartet die Visual-C++-Version eines std::string, mit entsprechender Anpassung der vTable, der Members usw. Und schon knallts.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.12.2004, 14:07 Uhr
~Jonas
Gast


Klasse! Gibt es vielleicht irgendwelche vorschlädge die mir helfen können? Das wäre echt super, müssen auch keine schönen Sachen sein!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.12.2004, 21:29 Uhr
(un)wissender
Niveauwart


Da hat der Bruder Leif nicht unrecht.
Machen kannst du da eigentlich nichts. Entweder du kommst an den Sourcecode ran und kompiliertst den Code neu pder schreibst die Funktion selber oder nimmst den Compiler (auch die Version) mit der die DLL kompiliert worden ist.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 20.12.2004 um 21:31 Uhr von (un)wissender editiert.
 
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: