目的
3次元配列を動的に作る関数を作成しようとしています。
mallocじゃなくてcallocを使うことで初期化を自動的にしてくれる事は理解できました。
しかし、「関数 ‘calloc’ へ渡す引数が少なすぎます」、「戻りでポインタからキャスト無しに整数を作成しています」、「代入で整数からキャスト無しにポインタを作成しています」が出て来て治すことができません。
この場合何がいけないのでしょうか。
※「関数 ‘calloc’ へ渡す引数が少なすぎます」は解決しました。ありがとうございます。
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<math.h> 4#define pixel 128 5 6/*動的な3次元配列を作る関数*/ 7char memory3(int nx,int ny,int nz){ 8 int j,k; 9 char ***image; 10 //image[nz][ny][nx]のうち'nz'を確保する 11 image=(char ***)calloc(nz,sizeof(char **)*nz); 12 if(image==NULL){ 13 printf("memory allocation error\n"); 14 exit(1); 15 } 16 for(k=0;k<nz;k++){ 17 //image[nz][ny][nx]のうち'ny'を確保する 18 image[k]=(char **)calloc(ny,sizeof(char *)*ny); 19 if(image[k]==NULL){ 20 printf("memory allocation error\n"); 21 exit(1); 22 } 23 for(j=0;j<ny;j++){ 24 //image[nz][ny][nx]のうち'nx'を確保する 25 image[k][j]=(char *)calloc(nx,sizeof(char)*nx); 26 if(image[k][j]==NULL){ 27 printf("memory allocation error\n"); 28 exit(1); 29 } 30 } 31 } 32 return image; 33} 34 35int main(void){ 36 FILE *fp1,*fp2; 37 int nz=pixel,ny=pixel,nx=pixel,i,j,k; 38 char ***image; 39 image=memory3(nx,ny,nz); 40 char ***nimage; 41 nimage=memory3(nx,ny,nz); 42 char proj[nx][ny]; 43}
回答2件