C言語の小さな秘密の【メモリ割り当て】


FROM: http://blog.csdn.net/bigloomy/article/details/6581706
================================================================================================================
realloc()関数
プロトタイプ:extern void*realloc(void*memuadres、unsigned int news ize);
構文:ポインタ名=(データタイプ*)realloc(メモリサイズを変更するポインタ名、新しいサイズ)
ヘッダファイル:芰include<stdlib.h>いくつかのコンパイラは驳includeを必要とし、TC 2.0でalloc.hヘッダファイルを使用することができます.
機能:まずnewsizeで指定された大きさによってスペースを割り当て、元のデータを最初から最後まで新たに割り当てられたメモリ領域にコピーし、元のmem_を解放する.addressとは、新たに割り当てられたメモリ領域の先頭アドレスを返します.すなわち、メモリブロックのアドレスを再割り当てする.
戻り値:再割り当てが成功すれば、割り当てられたメモリを指すポインタを返します.そうでなければ、空のポインタNULLを返します.
ここの原始メモリのデータはそのままです.メモリが使用されない場合は、free()関数を使用してメモリブロックを解放します.
mallo()関数
プロトタイプ:extern void*malloc(unsigned int num tes);
ヘッダファイル:TC 2.0では、malloc.hまたはalloc.h(注:alloc.hとmallooc.hの内容は完全に一致しています)が使用できますが、ビジュアルC+6.0ではmalloc.hまたはstdlib.hが使用できます.
機能:分配長さはnum_bytesバイトのメモリブロック
戻り値:割り当てが成功すれば、割り当てられたメモリを指すポインタを返します.そうでなければ、空のポインタNULLを返します.メモリが使用されない場合は、free()関数を使用してメモリブロックを解放します.
説明:この関数のプロトタイプについては、古いバージョンでは、mallocはchar型のポインタを返します.新しいANSIC規格では、この関数はvoid型のポインタに戻りますので、必要に応じてタイプ変換を行います.
caloc関数
calocはC言語の関数です.
機能:メモリのダイナミック記憶領域にsizeというn個の長さの連続空間を割り当て、関数は割り当てられた開始アドレスを指すポインタを返す.割り当てが成功しない場合、NULLに戻ります.
mallocとの違い:
calocはダイナミックにメモリを割り当てた後、自動的にメモリ空間を0に初期化しますが、mallocは初期化しません.中のデータはランダムなごみデータです.
使い方:void*caloc(unsigned n、unsigned size);
ヘッダファイル:stdlib.hまたはmalloc.h
#include <stdio.h>
#include <stdlib.h>
int main(void)
{    
 int num = 10;
    int i;    
 long *p = (long *)malloc(num * sizeof(long)); 
 long *p1=(long *)calloc(num,sizeof(long));
 for (i = 0; i < num; i++)
 {
  printf("%d\t", p[i]);
 }
 for (i = 0; i < num; i++)
 {
  printf("%d\t", p1[i]);
 }
 printf("    : %p
~~~~~~~~
", p); for (i = 0; i < num; i++) p[i] = i+1; for (i = 0; i < num; i++) printf("%d\t", p[i]); printf("
------------------
"); num = 4; p = (long *)realloc(p, num*sizeof(long)); printf(" : %p
~~~~~~~~
", p); for (i = 0; i < num; i++) printf("%d\t", p[i]); printf("
------------------
"); num = 10; p = (long *)realloc(p, num*sizeof(long)); printf(" : %p
~~~~~~~~
", p); for (i = 0; i < num; i++) printf("%d\t", p[i]); free(p); free(p1); getchar(); return 0; }
実行結果は:
 
C语言的那些小秘密之【内存分配】
データから彼らの違いが直観的に見られます.
========================================================================================================================================