calloc関数でunsigned charでのメモリ確保を実現したい
bainaryファイルを読み込み、(622,25088) の配列に格納するプログラムを書いています。
配列を生成するときに、動的メモリ確保する関数callocを使っていますが、その際にエラーが出ます。
発生している問題・エラー
… now frame 148 now frame 149 now frame 150 now frame 151 now frame 152 now frame 153 now frame 154 now frame 155 Segmentation fault (core dumped)
該当のソースコード
c/c++
1#include <iostream> 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5 6//#define debug 7 8int main(void){ 9 char inname[100] = "./input.txt"; 10 FILE *infp; 11 infp=fopen(inname,"rb"); 12 if(infp==NULL){ 13 perror("input file open error"); 14 exit(-1); 15 } 16 17 int **matrix, *base_matrix; 18 int frame=622, channel=512, winsize=7; 19 int tmp=channel*winsize*winsize; 20 unsigned char buf; 21 22 matrix=(int**)calloc(sizeof(int *), frame); 23 base_matrix=(int*)calloc(sizeof(unsigned char), frame*tmp); 24 for(int i=0;i<frame;i++){ 25 matrix[i] = base_matrix+i*tmp; 26 } 27 28 //printf("test :%d\n",tmp); //ok 29 30 for(int i=0;i<frame;i++){ 31 printf("now frame %d\n", i); 32 for(int j=0;j<tmp;j++){ 33 //if(i==155){ 34 // printf("j:%d\n",j); 35 //} 36 fread(&buf,1,1,infp); 37 matrix[i][j]=buf; 38#ifdef debug 39 if((j+1)%49==0){ 40 printf("%3d\n\n", matrix[i][j]); 41 }else if((j+1)%7==0){ 42 printf("%3d\n", matrix[i][j]); 43 }else{ 44 printf("%3d ", matrix[i][j]); 45 } 46#endif 47 } 48 } 49 50 return 0; 51} 52
試したこと
base_matrix=(int*)calloc(sizeof(unsigned char), frame*tmp);
の行の「unsigned char」を「int」に変更するとセグフォがなくなり動きます。
bufを代入しているので、unsigned charでのメモリ確保でできるはずなのですが...
補足情報(FW/ツールのバージョンなど)
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/12 07:50