Ist dieses Programm richtig?
-
#include <string> int main() { std::string s = "C++"; }
Boundschecker für Visual C++ meint immer:
Unrelated Pointer: Comparing two unrelated pointers 0x12FEC0 and 0x42B0B8. Pointers are not within the same buffer.
// xstring bool _Inside(const _Elem *_Ptr) { // test if _Ptr points inside string return (_Myptr() <= _Ptr && _Ptr < _Myptr() + _Mysize); }
-
sofern du bei deinem msvcc alle neuesten updates gemacht hast, sollte eigentlich kein problem auftreten, da dein code 100% richtig ist
-
hi
das programm ist fast richtig. nur musst du, wenn du den string nicht mehr brauchst, bzw. am ende des programm, den string wieder freigeben. korrekt sieht das so aus:
#include <string> int main() { std::string s = "C++"; delete &s; }
-
@Jens
Welches Datum ist heute, doch nicht etwa der 1. April?
-
16.05.2003 ... Warum fragst du? Das Datum steht doch hier überall im Forum oder in Windows/Linux ist doch auch ein Kalender eingebaut.
-
Original erstellt von <Jens>:
**delete &s;
**
deshalb
Das ist etwa so, wie in nem Porzellanladen mit ner Concorde eine Notlandung machen. (okokok ich hab etwas übertreiben
)
-
Original erstellt von <Jens>:
**hidas programm ist fast richtig. nur musst du, wenn du den string nicht mehr brauchst, bzw. am ende des programm, den string wieder freigeben. korrekt sieht das so aus:
#include <string> int main() { std::string s = "C++"; delete &s; }
**
"delete" ist ausschliesslich dann aufzurufen, wenn mit "new" dynamisch Speicher angefordert wurde. Und jetzt die Frage an dich: Wo wird hier Speicher mit "new" angefordert? Also ich sehe hier keine dynamische Variable vom Typ std::string.
If you didn't use new to create it, using delete to free it is wrong, unnecessary, and will cause undefined behaviour.
oder etwas ausführlicher:
The ARM is very explicit on this point, and so should be any C++ text.
You may use 'delete' only with a pointer obtained from 'new', or with
the value zero. Array syntax must be used with delete if and only if
array syntax was used with the corresonding new. You may delete the
pointer at most once.The results of any other usage are undefined.
[ Dieser Beitrag wurde am 16.05.2003 um 20:02 Uhr von Descartes editiert. ]
-
Noch ne andere Frage: wozu dieses std:: vor string? Ist doch überflüssig.
-
Hi!
Das std:: steht da weil der string sich im Namensraum std befindet. Ohne dieses std:: könntest Du den string nicht verwenden.
Das std:: kann gespart werden wenn mit hilfe von using das ganze sichtbar gemacht wird.
using std::string oder using namespace std;
Über Google.de wirst Du über NameSpaces sicherlich einiges finden.
-
#include <string> using namespace std; int main () { string s = "C++"; //hier ist std überflüssig } //oder #include <string> using std::string; int main () { string s = "C++"; //hier auch }
solange string im namespace std liegt, muss das der compiler auch wissen.
wenn dein compiler es auch anders zulässt, ist er nicht standardkonform.
-
Nicht standardkonform? Hmm, da muss ich mir wohl auch nen anderen Compiler besorgen...