Speicher überladen



  • Hallo unser Lehrer hat uns letzdens gesagt das man folgendes nicht machen darf

    #include <iostream>
    using namespace std;
    
    int test();
    
    int main()
    
    {
    
    for (int i=0;i=1;i++)
    {
    test();
    }
    
    system("PAUSE");
    }
    
    int test()
    {
    int test();
    }
    

    Da man sonst einen Bluescreen kriegt meine er weil der Speicher überladen wird
    ich hab das mal eine Zeitlang laufen lassen aber da passiert nichts XD
    Was mach ich da falsch ?^^

    Hier mein 2ter Versuch XD

    Welcher aber auch leider kein erfolg brachte^^

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    String a= "test1";
    String b= "test2";
    
    for (int i=0;i=256; i++)
    {
    Memo1->Lines->Add(a);
    Memo1->Lines->Add(b);
    
    long 	AAA	;
    ... // lange Liste von long-Variablen ohne Initialisierung
    long 	ZVEROVICH	;
    
    }
    }
    //---------------------------------------------------------------------------
    

    /Edit akari : Bitte keinen überflüssigen Code posten!



  • Hallo,

    Beim ersten Fall hast du einfach einen Fehler in der Definition von test.

    int test()
    {
      int test();
    }
    

    Du willst wahrscheinlich innerhalb von test die Funktion test wieder aufrufen. Was du aber hier machst ist: du deklarierst innerhalb von test eine Variable namens test. Die Variable wäre in deinem Fall vom Typ "Zeiger auf eine Funktion mit Rückgabetyp int und ohne Parameter".
    Lass einfach das int davor weg.

    int test()
    {
      test();
    }
    

    jetzt solltest du deinen Stack-Overflow bekommen.
    das zweite beispiel kommentiere ich mal nicht.
    Du solltest dich vielleicht mal mit einem Grundlagentutorial beschäftigen.
    Vielleicht hier
    http://tutorial.schornboeck.net/inhalt.htm



  • Wird VOR dem 1. Durchlauf der for-Schleife nicht schon das Laufkriterium geprüft? Das ist doch in beiden Codes nicht erfüllt? Würde für mich heißen: in beiden Codes wird die for-Schleife nicht ein einziges Mal durchlaufen.... Oder bin ich jetzt überladen?



  • Nein, das sind beides Endlosschleifen. Er hat beim Abbruchkriterium statt einem Test eine Zuweisung stehen. In seinem Fall wird also der Inhalt von i in ein bool konvertiert und dann ausgwertet. Wenn es true ergibt läuft die Schleife weiter. Bei der ersten schleife ist es 1, bei der zweiten 256 und beides ergibt true.
    Beim ersten Beispiel ist die Schleife sowieso Quatsch.



  • Braunstein schrieb:

    Nein, das sind beides Endlosschleifen. Er hat beim Abbruchkriterium statt einem Test eine Zuweisung stehen.

    hmm ja, ist ja ne Zuweisung... ich sollte Feierabend machen.

    Braunstein schrieb:

    Beim ersten Beispiel ist die Schleife sowieso Quatsch.

    Wollt ich auch gemeint haben.



  • Hallo

    Zum zweiten Beispiel : Diese ganzen Long-variablen bringen gar nichts. Die optimiert der Compiler einfach weg weil er merkt das die nirgends gebraucht werden.

    Und fürs Posten von C++ Code bitte auch die Tags für C++ Code nehmen, dann bekommst du auch Syntax Highlightning!

    bis bald
    akari



  • Jo so hats funktioniert :> ty

    #include <iostream>
    using namespace std; 
    
    int test(); 
    
    int main() 
    
    { 
    
    test();
    system("PAUSE"); 
    } 
    
    int test()
    { 
    test();
    }
    

Anmelden zum Antworten