C++ Speicher besetzen funktioniert nicht



  • Hallo,

    Ich mache gerade das Tutorial hier durch und bin gerade hier: http://www.cplusplus.com/doc/tutorial/dynamic/

    Das mit der Speicherbesetzung habe ich Nachgemacht:

    #include <SDKDDKVer.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <new>
    using namespace std;
    
    int _tmain()
    {
    	unsigned long count=cin.get();
    	int* ptr= new (nothrow) int[count];
    	if (ptr==0)
    	{
    		cout << "Error allocating Memory\n";
    		system("PAUSE");
    	}
    	else
    	{
    		cout << "Success, freeing memory...\n";
    		system("PAUSE");
    		delete[] ptr;
    	}
    	return 0;
    }
    

    Egal wie hoch die Zahl ist, die ich eingebe, es ist immer erfolgreich 😞 Dabei habe ich gerade mal 2 GB RAM frei .. wo ist der Fehler?

    Mfg Nino/Cotec



  • ich denk mal aber, dein os hat eine art swap speicher, sie hier
    wieso machst du das mit new und delete? genau dafür gibt es std::vector oder std::array bzw. die anderen container der standard-lib von c++

    Edit: man sollte sich auch einmal den quellcode genauer anschauen, der hinweis mit den containern gilt natürlich immer noch 😉



  • Zeile 12 ist falsch:

    Dort muss stehen:

    unsigned long count;
    cin >> count;

    Denn cin.get() liest nur ein Zeichen.



  • Ah, danke 🙂



  • vario-500 schrieb:

    ich denk mal aber, dein os hat eine art swap speicher, sie hier
    wieso machst du das mit new und delete? genau dafür gibt es std::vector oder std::array

    std::array hat mit Freispeicher nix am Hut.



  • Was ist _tmain? Warum includierst Du SDKDDKVer.h, stdio.h, tchar.h, string, sstream? Warum system("PAUSE"), statt einfach std::cin.get()? Dieses system("PAUSE") ist so eine Sache, die ich immer wieder sehe und so ziemlich das schlechteste ist, um mal pause zu machen. Da wird ein Prozess gestartet. Und wenn man einmal gesehen hat, wie viele Systemaufrufe dafür notwendig sind, um einen Prozess zu starten, dann möchte man das nicht mehr machen.



  • Sone schrieb:

    std::array hat mit Freispeicher nix am Hut.

    hab ich auch nicht behauptet. ich wollt nur nochmal sagen, dass man statt dem new lieber einen std::vector oder ein std::array benutzen sollte. mehr wollt ich damit nicht sagen, oder meinst du noch was anderes ?



  • vario-500 schrieb:

    Sone schrieb:

    std::array hat mit Freispeicher nix am Hut.

    hab ich auch nicht behauptet. ich wollt nur nochmal sagen, dass man statt dem new lieber einen std::vector oder ein std::array benutzen sollte. mehr wollt ich damit nicht sagen, oder meinst du noch was anderes ?

    Wenn man die Verwendung von Freispeicher üben will, hilft es nicht, wenn er nicht Freispeicher verwendet. Da ginge std::array am Ziel vorbei 😉 .



  • vario-500 schrieb:

    oder ein std::array benutzen sollte. mehr wollt ich damit nicht sagen, oder meinst du noch was anderes ?

    Dir ist schon klar, dass std::array ein Wrapper um ein statisches Array ist, und man new[] eigentlich für dynamische Arrays verwendet? 😃 🙂


Anmelden zum Antworten