[C言語]mallocの配列をリサイズするには?

C言語

どうも、ちょげ(@chogetarou)です。

mallocの配列(array)をリサイズ(サイズを変更)する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

mallocの配列(array)をリサイズ(サイズを変更)するには、realloc()を使います。

まず、realloc()を呼び出します。

realloc()の対象の配列、第2引数に新しいメモリーサイズを指定します。

そして、realloc()の結果を対象の配列に代入します。

//myArray=配列名, memorySize=新しいメモリーサイズ
myArray = realloc(myArray, memorySize);

上記の代入は、対象のmalocの配列をリサイズします。

もし、要素数からリサイズする場合は、要素数に要素の型のサイズを掛けて、メモリーサイズを算出します。

//要素数でリサイズする場合
//newSize=新しい要素数, T=要素の型
myArray = realloc(myArray, newSize * sizeof(T));

使用例

#include <stdio.h>
#include <stdlib.h>

int main(void){
    
    int size = 10;
    int *myArray = (int*)malloc(size * sizeof(int));
    for (int i = 0; i < size; i++) {
        myArray[i] = i + 1;
    }
    
    printf("変更前:");
    for (int i = 0; i < size; i++) {
        printf("%d ", myArray[i]);
    }
    printf("\n");
    
    int newSize = 20;
    myArray = realloc(myArray, newSize * sizeof(int));
    for (int i = 0; i < newSize; i++) {
        myArray[i] = i + 1;;
    }
    
    printf("変更後:");
    for (int i = 0; i < newSize; i++) {
        printf("%d ", myArray[i]);
    }
    
    return 0;
}
出力:
変更前:1 2 3 4 5 6 7 8 9 10 
変更後:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

コメント

タイトルとURLをコピーしました