Vad ska man göra om man får stack overflow? Jag har läst en massa om att man får det när man använder mer än den MB av minnet som man får när man startar programmet. Men vad ska jag göra åt det, mitt programm använder endast följande variabler: Kolla att du inte har rekursion, dvs att en funktion anropar sig själv på nåt sätt. här ärkoden snälla ta en titt på den jag hittar inga fel ;( Herregud... koden är bra snurrig. Hej Ted!stack overflow!
int veckodag, dag, manad, ar, timme, minut, sekund, skottar, kalle=1;
char tveckodag[20], tmanad[20];
det är väll inte mycet????
och programet innehåller endast tre funktioner och det beror inte på dem jag har testat mig fram...
Snälla hjälp mig! kan an utöka den minnesgränsen som bara är på 1MB????
jag hittade precis något som hette YYMAXDEPTH och E_STORE ingen aning om det ens är C++ men jag ska läsa vidare om det, jag kan självklart ha helt fel!!
Mvh
TedSv: stack overflow!
Sv: stack overflow!
#include <fstream>
#include <constrea>
#include <conio>
#include <time>
#include <dir>
#include <iostream>
#include "includes\iodos.h"
int t1;
int allt();
int fel();
int main()
{
do
{
t1=allt();
}while (t1==-1);
return 0;
}
int allt()
{
dos_console();
int veckodag, dag, manad, ar, timme, minut, sekund, skottar, kalle=1;
char tveckodag[20], tmanad[20];
ifstream skottarinfile("skottar",ios::binary);
skottarinfile.read((char *)&skottar,sizeof(int));
skottarinfile.close();
clrscr();
cout
<< "Ange startvärden:" << endl
<< "Veckodag (1-7): ";
cin >> veckodag;
if(veckodag<1 || veckodag>7)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nDag (1-31): ";
cin >> dag;
if (dag<1 || dag>31)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nMånad: (1-12): ";
cin >> manad;
if (manad<1 || manad>12)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nÅr: ";
cin >> ar;
if (ar<0)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nTimme: (0-23): ";
cin >> timme;
if (timme<0 || timme>23)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nMinut (0-59): ";
cin >> minut;
if (minut<0 || minut>59)
{
t1=fel();
if (t1==-2)
return -1;
}
cout << "\nSekund (0-59): ";
cin >> sekund;
if (sekund<0 || sekund>59)
{
t1=fel();
if (t1==-2)
return -1;
}
while(kalle==1)
{
if (veckodag==1)
strcpy(tveckodag, "Måndag");
else if (veckodag==2)
strcpy(tveckodag, "Tisdag");
else if (veckodag==3)
strcpy(tveckodag, "Onsdag");
else if (veckodag==4)
strcpy(tveckodag, "Torsdag");
else if (veckodag==5)
strcpy(tveckodag, "Fredag");
else if (veckodag==6)
strcpy(tveckodag, "Lördag");
else if (veckodag==7)
strcpy(tveckodag, "Söndag");
if (manad==1)
strcpy(tmanad, "Januari");
else if (manad==2)
strcpy(tmanad, "Februari");
else if (manad==3)
strcpy(tmanad, "Mars");
else if (manad==4)
strcpy(tmanad, "April");
else if (manad==5)
strcpy(tmanad, "Maj");
else if (manad==6)
strcpy(tmanad, "Juni");
else if (manad==7)
strcpy(tmanad, "Juli");
else if (manad==8)
strcpy(tmanad, "Augusti");
else if (manad==9)
strcpy(tmanad, "September");
else if (manad==10)
strcpy(tmanad, "Oktober");
else if (manad==11)
strcpy(tmanad, "November");
else if (manad==12)
strcpy(tmanad, "December");
_setcursortype(_NOCURSOR);
clrscr();
cout << "Datum: " << tveckodag << " den " << dag << ":e " << tmanad << " " << ar << " Kl. " << timme << ":" << minut << ":" << sekund;
Sleep(990);
sekund++;
if (sekund==60)
{
sekund=0;
minut++;
if (minut==60)
{
minut=0;
timme++;
if (timme==24)
{
timme=0;
veckodag++;
dag++;
if (veckodag==8)
{
veckodag=1;
}
if (dag==29 && manad==2 && ar!=skottar)
{
dag=1;
manad++;
}
else if (dag==29 && manad==2 && ar==skottar)
{
}
else if (dag==30 && manad==2 && ar==skottar)
{
dag=1;
manad++;
skottar+=4;
}
else if (dag==31 && (manad==4 || manad==6 || manad==9 || manad==11))
{
dag=1;
manad++;
}
else if (dag==32 && (manad==1 || manad==3 || manad==5 || manad==7 || manad==8 || manad==10 || manad==12))
{
dag=1;
manad++;
}
if (manad==13)
{
manad=1;
ar++;
}
}
}
}
chdir("data");
ofstream veckodagoutfile("veckodag",ios::binary);
veckodagoutfile.write((char *)&veckodag,sizeof(int));
veckodagoutfile.close();
ofstream dagoutfile("dag",ios::binary);
dagoutfile.write((char *)&dag,sizeof(int));
dagoutfile.close();
ofstream manadoutfile("manad",ios::binary);
manadoutfile.write((char *)&manad,sizeof(int));
manadoutfile.close();
ofstream aroutfile("ar",ios::binary);
aroutfile.write((char *)&ar,sizeof(int));
aroutfile.close();
ofstream timmeoutfile("timme",ios::binary);
timmeoutfile.write((char *)&timme,sizeof(int));
timmeoutfile.close();
ofstream minutoutfile("minut",ios::binary);
minutoutfile.write((char *)&minut,sizeof(int));
minutoutfile.close();
ofstream sekundoutfile("sekund",ios::binary);
sekundoutfile.write((char *)&sekund,sizeof(int));
sekundoutfile.close();
ofstream skottaroutfile("skottar",ios::binary);
skottaroutfile.write((char *)&skottar,sizeof(int));
skottaroutfile.close();
chdir("..");
}
return 0;
}
int fel()
{
clrscr();
cout << "Haha, där skrev du minsan fel, tryck enter för att få försöka igen!";
getch();
return -2;
}Sv: stack overflow!
Inte för att tjata eller vara otrevlig, men du har fortfarande fel tankesätt. Tänk på en funktion så här:
En funktion ska uppfylla en exakt specificerad uppgift och bara den uppgiften.
Att dela upp det i "allt()" och "fel()" hjälper dig inte mycket.
Förstår du nu varför jag snackar om att det är viktigt att ha rätt inställning till programmeringen?
Det är mycket svårt att konstatera vad det är som är fel, och det är ingen som orkar läsa igenom funktioner som är flera sidor långa. Det är inget "tufft" i att kunna skriva krånglig kod, det är bara onödigt och tar tid från riktiga problem.
Det bästa hade nog varit om du hade sagt precis vad du vill att programmet ska göra så kan vi strukturera upp det tillsammans. Då har du något lätthanterligt att utgå ifrån.Sv: stack overflow!
I din kod har du en WHILE loop som körs så länge kalle är lika med 1.
Den loopen bryts aldrig, då kalle aldrig får något annat värde.
//Håkan