Padání jednoduchého programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Padání jednoduchého programu – C / C++ – Fórum – Programujte.comPadání jednoduchého programu – C / C++ – Fórum – Programujte.com

 

kadet
~ Anonymní uživatel
23 příspěvků
10. 10. 2009   #1
-
0
-

Dobrý den, chtěl bych se zeptat, jestli by mi mohl někdo poradit, proč tento jednoduchý prográmek padá.

Výpis debuggeru:

Debugger name and version: GNU gdb 6.7.50.20071127
Child process PID: 3620
Program received signal SIGSEGV, Segmentation fault.
In ntdll!RtlCreateMemoryZone () (C:\Windows\system32\ntdll.dll)



#include <iostream>

using namespace std;

class Cisla
{
public:
void vypis();
void zapis_pocet(int cislo);

private:
int i;
int pocet;
int promena[];
};

void Cisla::vypis()
{
for (i=0;i<=pocet;i++)
{
promena[i]=i;
};

for (i=0;i<=pocet;i++)
{
cout << promena[i] << endl;
};
};

void Cisla::zapis_pocet(int cislo)
{
pocet=cislo;
};

int main()
{
cout<< "Zadejte po ktere cislo chcete cisla vypsat:" ;

int pomocnap;
cin>>pomocnap;

Cisla*ucisla=new Cisla;
ucisla->zapis_pocet(pomocnap);
ucisla->vypis();

return 0;

}


Nahlásit jako SPAM
IP: 88.146.143.–
KIIV
~ Moderátor
+43
God of flame
10. 10. 2009   #2
-
0
-

kde inicialuzujes todle: int promena[]; ?

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Wizard0
Stálý člen
10. 10. 2009   #3
-
0
-

Ja vidim problem v tom, ze dynamicky inicializujes a nikde nevidim deinicializaciu. Ked nieco alokujes pomocou operatora 'new' musis zavolat 'delete' a upratat :).

Nahlásit jako SPAM
IP: 85.216.193.–
KIIV
~ Moderátor
+43
God of flame
10. 10. 2009   #4
-
0
-

To Wizard : to mimo jine taky.. ale u takhle trivialniho pripadu se nic nedeje.. horsi by bylo, kdyby delal nejakou sluzbu, ktera bezi porad :D tam pak memory leak umi udelat poradnou paseku

ja spis vidim problem int promena[];
a pak pouziva promena[i] ... na pole nulove velikosti to proste nejde
a protoze je objekt inicializovanej dynamicky tak to uz muze zasahovat kdo vi kde do pameti

u dynamicky alokovane promenne se da i velice dobre spolehnout na to, ze tam bude nejaky smeti :D

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
kadet
~ Anonymní uživatel
23 příspěvků
10. 10. 2009   #5
-
0
-

To KIIV : díky moc opravdu byl problém v tom int promena[] :)

Nahlásit jako SPAM
IP: 88.146.143.–
doesnt matter
~ Anonymní uživatel
2 příspěvky
12. 10. 2009   #6
-
0
-

pravdepodobne tam chces int* premenna = NULL; (to priradenie potom v konstruktore samozrejme) a potom podla toho co uzivatel zadal (t.j. velkost toho pola) v metode zapis pocet urobit:
premmenna = malloc (sizeof(int)*cislo);
kde cislo je velkost toho pola (ktoru zadal user na zaciatku programu)

Nahlásit jako SPAM
IP: 147.175.184.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 82 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý