Kezdőoldal » Számítástechnika » Programozás » C++ kiakad "nagy" számoktól,...

C++ kiakad "nagy" számoktól, mint pl 2000?

Figyelt kérdés

Évfolyam zh-ra gyakorlok és belefutottam ebbe a problémába, hogy ha a programot tesztelésnél teleírom olyan számokkal, mint 2-3-4-5 stb, akkor tökéletesen lefut, azonban ha mondjuk valahova 2000-et írok, az már nagy neki és nem fut le a program. Olyan feladatok, ahol meg kell adni, hogy hányféle különböző adat lett megadva. Ha az ezt vizsgáló részt kiszedem a programból, akkor tökéletesen lefut nagy számokkal is. Ami felettébb érdekes, hogy több ilyen feladatot megírtam már, az első ilyennél egyik haverom segítségét kértem, sikerült is megírni egy ilyen feladatot, azonban akármikor máskor megpróbáltam ilyen feladatot megoldani az alapján, ez történik, hogy lefagy. Megírtam "kicsiben" is ezt a programrészt, ugyanúgy lefagy, ha 2000-et írok be. Mi lehet a gond? Ti találkoztatok már ilyennel? Még annyi, hátha segít, hogy Code::Blocks-ot használok, 16.01 és GNU CCC compiler.

Spórolás végett az int main() előtti meg return 0; utáni dolgokat nem másoltam be.


int n;

cerr<<"n= ";

cin>>n;

int tomb[100],hanyfele;

bool vizsgal[100];

for (int i=0;i<n;i++)

{

vizsgal[i]=false;

cerr<<i+1<<". elem= ";

cin>>tomb[i];

}

hanyfele=0;

for (int i=0;i<n;i++)

{

if (vizsgal[tomb[i]-1]==false)

{

vizsgal[tomb[i]-1]=true;

hanyfele++;

}

}

cout<<hanyfele<<endl;



2016. dec. 29. 12:52
1 2 3
 21/29 A kérdező kommentje:
Mindenképpen érdekel, szerintem hasznos, ha többféle megoldást is látok, ismerek. Köszönöm szépen!
2016. dec. 30. 09:28
 22/29 anonim ***** válasza:

#15


Te olvasod is amit linkelsz? Így kezdődik: "Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++."

2016. dec. 30. 16:43
Hasznos számodra ez a válasz?
 23/29 anonim ***** válasza:

#22: a #14-es hozzászólásra válaszoltam ezzel, ugyanis ő azt állította, hogy a C++-ban egyáltalán nincs erre lehetőség. Viszont a (kérdező által is használt) GCC ezt - a C-ben elérhető lehetőséget - megengedi, mint azt te is citáltad.


Sőt a C++14-ben is lehet hasonlót csinálni - runtime-sized array néven:

* [link]

de ha nagyon ragaszkodunk a régebbi C++ szabványokhoz/a nem-GCC-fordítókhoz, a #20-as hozzászólásban van egy példa a tömb méretének megadására.

2016. dec. 30. 16:54
Hasznos számodra ez a válasz?
 24/29 anonim ***** válasza:

#23


Amit linkeltél az csak egy javaslat, hogy mi kerüljön be a szabványba, és az jelenleg még nem lett elfogadva, még a C++17 -es szabványba sem került be idáig. A C++ szabvány része nem is volt soha, csak a C szabványban amit a GCC enged C++ kódban is mint kiegészítés, de mivel nem szabvány így nagyon nem javalott a használata.


Normális fordítói flagekkel ki is írja: /main.cpp:27: warning: ISO C++ forbids variable length array ‘arr’ [-Wvla]

int arr[i];

^

2016. dec. 30. 17:57
Hasznos számodra ez a válasz?
 25/29 anonim ***** válasza:

"A C++ szabvány része nem is volt soha"

Nem is állítottam ezt, csak hogy a C++-ban a (kérdező által használt!) GCC által támogatva van a VLA, illetve a C++14 szabványtervezet tartalmaz hasonló módszert.


"Normális fordítói flagekkel"

Ami opcionális.

2016. dec. 30. 18:05
Hasznos számodra ez a válasz?
 26/29 anonim ***** válasza:

"szerintem nem szép dolog a 'dinamikus' méretű tömböket a stackben tárolni"


Ezzel amúgy részben egyet tudok érteni, amit viszont senki nem hozott fel, és nekem sokkal jobban fáj a kódodban: ha a cout.operator<<() exceptiont dob, akkor kész is a memory leak..

2016. dec. 30. 22:26
Hasznos számodra ez a válasz?
 27/29 anonim ***** válasza:
0%
Milyen memory leak egy 10 soros konzol alkalmazásban, ami 10 ms alatt lefut te nagyon sötét
2016. dec. 30. 22:33
Hasznos számodra ez a válasz?
 28/29 anonim ***** válasza:
Az pont ugyanolyan, mint bármelyik másik.. (de persze én vagyok a sötét)
2016. dec. 30. 22:37
Hasznos számodra ez a válasz?
 29/29 anonim ***** válasza:

Ha elte bíró, akkor a cerr-t ne javítsd cout-ra,mert ki fog akadni.

Igazuk van a válaszolóknak, hogy az lenne az elegáns, de a bíró csak a cerr-el megy, ahogy scináltad.

2017. jan. 1. 13:26
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!