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?
Niz od 10 miliona elemenata
Zaključano
Zakačeno
Pokazi kod.
izmenjeno 1 put, poslednji put X Files 24.01.2010. u 15:04
Izmene poruke
- X Files24.01.2010. u 15:04zapis iz teksta poruke
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/
EDIT : velicina stringa ---> velicina niza
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;
}
#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
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.
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.
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;
}
#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;
}