I många fall avgör användaren i farten om ett program kommer att behandla en rad av 10 element eller 10.000 . Eftersom array storlek är okänd i förväg , måste du avsätta minne och släppa den under programkörning . Denna minneshantering under körning är känd i datavetenskap som dynamisk minneshantering . Denna artikel fokuserar på de funktioner avsedda för dynamisk minnesallokering i C. Du behöver
Integrated Development Environment med C + + kompilator
bok om C -programmering
Visa fler instruktioner
1
Inkludera biblioteket filen med standardbiblioteket definitioner . Detta är den " stdlib.h " filen och den innehåller bland annat viktiga C- funktioner , alla funktioner som utför dynamisk minnesallokering . För att inkludera detta bibliotek filen i programmet , infoga följande rad på toppen av din källa /sidhuvudfilen
Exempel : .
# Include Sida 2
Bestäm vad du vill göra . Sedan välja funktionen från följande steg som bäst passar till minnet - fördelning åtgärd du vill utföra . Efter ett minne block av känd storlek
3
Använd malloc ( ) . " Malloc " allokerar "storlek " bitgrupper och returnerar en pekare till början av blocket
Prototype :
void * malloc ( size_t storlek) ;
Exempel: .
Int i;
char * buf ; printf ( " Ange strängen längd : " ) ;
scanf ( " % d " , & i) ;
buf = ( char * ) malloc ( i +1 ) ,
if ( NULL == buf ) exit ( 1 ) , kommenterar: //etc
4
Anställ calloc ( ) för en samling av element där varje element har en storlek på mer än ett byte . " Calloc " allokerar en bit av minnet för " num " element varje element är "storlek" bytes i längd . Den returnerar en pekare till början av blocket
Prototype :
void * calloc ( size_t num, size_t storlek) ;
Exempel: .
Int i , n;
int * Parr ,
printf ( " Ange antal heltal : " ) ;
scanf ( " % d " , & I ) ,
n = sizeof ( int ) ;
Parr = ( int * ) calloc ( i, n ) ;
if ( NULL == Parr ) exit ( 1 ) , kommenterar: //etc
5
Utnyttja realloc ( ) för att ändra storlek på ett minnesblock . " Realloc " expanderar eller minskar minnet block av "storlek" bytes som " PTR " pekade
Förebild:
oid * realloc ( void * ptr , size_t storlek ) ,
Exempel : .
Int num1 , num2 ,
int * arr = null;
do {
printf ( " Ange ett positivt heltal : " ) ;
scanf ( " % d " , & num1 ) ,
tag ( 1 > num1 ) ,
arr = ( int * ) calloc ( num1 , sizeof ( int ) ) ;
if ( NULL == arr ) exit ( 1 ) ;
do {
printf ( " Ange ett positivt heltal : " ) ;
scanf ( " % d " , & num2 ) ,
medan ( 1 > num2 ) ,
arr = ( int * ) realloc ( arr , num2 * sizeof ( int ) ) ;
if ( NULL == arr ) exit ( 1 ) , kommenterar: //etc
6
Släpp ett block av minne tilldelas i steg 3 till 5 genom att använda gratis ( ) . " Gratis " frigör minnet blocket som börjar på minnesplats som " PTR " pekade på
Förebild:
void free ( void * ptr ) ,
Exempel : .
Int * buf ;
buf = ( int * ) malloc ( 100 * sizeof ( int ) ) ;
gratis ( buf ) , kommenterar: //etc