[ proka_92 @ 23.01.2010. 18:41 ] @
Dakle treba da napravim niz sa max 10 miliona elemenata, medjutim kada pokrenem program izbacuje mi "Segmentation fault", i program se ne izvrsava... Kako da odradim to? |
[ proka_92 @ 23.01.2010. 18:41 ] @
[ X Files @ 23.01.2010. 18:49 ] @
Pokazi kod.
[ X Files @ 23.01.2010. 19:08 ] @
Potrazi po netu pojmove stack i heap u kontekstu alokacije memorije.
http://en.wikipedia.org/wiki/Buffer_overflow http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/ Code: #include <stdio.h> #include <stdlib.h> int main () { /* velicina niza */ unsigned long n; /* niz */ char * buffer; /* unos zeljene velicine niza */ printf ( "Velicina niza? " ); scanf ( "%lu", &n ); /* rezervisanje prostora */ buffer = (char*) malloc ( n ); if ( buffer == NULL ) /* neuspesan povratak */ exit ( 1 ); /* OVDE TVOJ KOD */ /* oslobadjanje prostora */ free ( buffer ); /* uspesan povratak */ return 0; } EDIT : velicina stringa ---> velicina niza [Ovu poruku je menjao X Files dana 24.01.2010. u 15:04 GMT+1] [ proka_92 @ 24.01.2010. 12:30 ] @
Koliko sam ja skapirao (ispravi me ako gresim), ovo sto si mi ti napisao je za stringove, a ja u niz treba da smestam sumu cifara brojeva iz odredjenog intervala.
[ X Files @ 24.01.2010. 14:13 ] @
Evo, sad sam ispravio, ali svejedno je.
Kada kazes: int niz[10000000]; ... to bi trebalo da bude kreirano na stacku-u, sto je prakticno nemoguce, jer je taj deo memorije predvidjen za podatke nazovi 'lokalnog' karaktera, koji ce trajati sve dok se ne izadje iz boloka. Kada kazes: // ... buffer = (int*) malloc ( n * sizeof(int) ); // ... ... rezervise se zeljena memorija (ako je OS ima na raspolaganju) na heapu. Kasnije je tvoja odgovornost vezana za pravovremeno oslobadjanje te memorije (free ( buffer );), da ne bi bespotrebno opterecivao resurse racunara dok tvoj program radi. Code: #include <stdio.h> #include <stdlib.h> int main () { /* velicina niza */ unsigned long n; /* niz */ int * buffer; /* unos zeljene velicine niza */ printf ( "Velicina niza? " ); scanf ( "%lu", &n ); /* rezervisanje prostora */ buffer = (int*) malloc ( n * sizeof(int) ); if ( buffer == NULL ) /* neuspesan povratak */ exit ( 1 ); /* OVDE TVOJ KOD */ /* oslobadjanje prostora */ free ( buffer ); /* uspesan povratak */ return 0; } Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|