Rückgabe von new()
-
new wirft default mäßig std::bad_alloc (aus dem header <new> )
mit der angabeX *y = new (nothrow) X;
sagst du new, dass es im fehlerfalle einen 0 zeiger zurückgeben soll
alternativ kannst du noch einen neuen new_handler, den new aufruft, wenn es keinen speicher mehr finden kann, über set_new_handler angeben, dieser kann versuchen, irgendwie doch noch speicher zu bekommen.
[ Dieser Beitrag wurde am 22.04.2003 um 11:38 Uhr von davie editiert. ]
-
Danke erstmal Leute,aber ich hab folgende Zeile mal versucht:
X *y = new (nothrow) X;
Der will das net fressen. Ich benutz den Borland 5.01, evtl. hat es damit was zu tun? Der will den Code da oben nicht fressen, er meint er kann mit den "nothrow" niox anfangen.
NiP
-
er meint er kann mit den "nothrow" niox anfangen.
Hast du den Header <new> inkludiert?
-
Ja hab ich, er meint aber trotzdem
Undefined Symbol 'nothrow'
-
Hallo,
wie sieht's mit dem Namespace std; aus? Falls du keine using-direktive/using-deklaration drin hast, heißt das Ding std::nothrow.Oder mal anders gefragt: Lässt sich das folgende Minimalprogramm übersetzen?
#include <new> int main() { int* p = new (std::nothrow) int(42); }
-
Nee, leider net. Er meldet folgendes: (4 Fehler) alle in der selben Zeile
Qualifier 'std' is not a class or namespace name
) expected
Type name expected
Could not find a match for 'operator new(unsigned int,undefined)'
DAs sind genau die, die ich vorher auch schon zu lesen bekam. Ich hab den Verdacht ich muss da was einstellen in den Optionen des Compilers.
NiP
[ Dieser Beitrag wurde am 24.04.2003 um 10:06 Uhr von Nobody_Is_Perfect editiert. ]
-
[quote]
Qualifier 'std' is not a class or namespace name
[/quoute]
...Das würde soviel heißen, als hätte deine Headerdatei noch gar keinen std-Namespace enthalten?
Sollte sich auch dieses Programm nicht übersetzen lassen, würde ich über die Anschaffung eines neueren Compilers DRINGENDST nachdenken:
[codet type="c++"]
#include <iostream>int main ()
{
std::cout << "Hello World!";return ( 0 );
}
[/code]Sollte sich nur das Programm von Hume Sikkins nicht übersetzen lassen, kann es auch sein, dass die Std-Libary deines Compilers nothrow nicht unterstützt.
Welchen Compiler verwendest du denn?
MfG SideWinder
-
Borland 5.01
ist das nicht der uralt compiler?
nimm dir doch einen neueren!
zB einen von http://www.c-plusplus.net/compiler.htm
-
Was bitte mit meinem Posting los?
MfG SideWinder
-
Hi ich bins wieder!
Danke für Eure Tips, aber ich bin auf 3 Compiler beschränkt (wegen speziellen Bibliotheken).
VC 1.52
BC 5.02
BC 3.0Ich hab jetzt mal den VC 1.52 versucht, aber der blödsinnige Editor cuttet mir die Zeilen nach 251 Buchstaben, kann ich da was einstellen, oder muss ich in einem anderen Editor arbeiten und nur damit Compilieren? Wär ja auch nicht das große Problem.
NiP
-
VC 1.52? Vergiss es, zu diesen Zeiten kannst du froh sein wenn es <iostream.h> gibt ;). Aber von nothrow hat der sicherlich noch nie etwas gehört.
MfG SideWinder
-
AFAIK werfen die alten STLs (in denen es auch noch keinen Namespace std gibt) keine exeption wenn new keinen Speicher allokiert, sondern geben einfach NULL zurück....