どうも、ちょげ(@chogetarou)です。
callocの配列(array)をリサイズ(サイズ変更)する方法を紹介します。
方法

callocの配列(array)をリサイズ(サイズを変更)するには、realloc()を使います。
まず、realloc()を呼び出します。
realloc()の対象の配列、第2引数に新しいメモリーサイズを指定します。
そして、realloc()の結果を対象の配列に代入します。
//myArray=callocの配列名, memorySize=新しいメモリーサイズ
myArray = realloc(myArray, memorySize);
上記の代入は、対象のcallocの配列をリサイズします。
もし、要素数からリサイズする場合は、要素数に要素の型のサイズを掛けて、メモリーサイズを算出します。
//要素数でリサイズする場合
//newSize=新しい要素数, T=要素の型
myArray = realloc(myArray, newSize * sizeof(T));
使用例
#include <stdio.h>
#include <stdlib.h>
int main(void){
int size = 10;
int *myArray = (int*)calloc(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
コメント