プログラムの概要
10進数を2進数に変換して配列に逆順(一番初めの位が配列の0番目に来るよう)に格納する関数を作り、その関数をmain内で呼び出してポインタを介して配列の先頭から出力するプログラムを書こうとしています。
環境
macOS Catalina 10.15.7
C言語はccでコンパイルしてます。
cc --version
Apple clang version 12.0.0 (clang-1200.0.32.2)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
質問
下の①と②の部分をコメントアウトしないとどちらもsegmentation faultとなってしまいます。どこの部分でアクセスしてはいけないメモリにアクセスしているのかわかりません。①はreturn 0の有無だけでsegmentation faultが出てきたり、②は前に書いてあることをfor文にしているだけなのになんで動かないんだろうという感じです。
わかる方いましたら解決方法のヒントだけでも教えて頂けると助かります。
C言語
1#include <stdio.h> 2void toBinaryArray(int *binary, int *b_size, int n); 3 4int main(void) 5{ 6 int binary[100]; 7 int *b_size; 8 int n = 100; //n of 3^n 9 toBinaryArray(binary, b_size, n); 10 // int b_size2 = *b_size; 11 int i; 12 printf("%d\n", *b_size); 13 printf("%d\n", n); 14 printf("%d\n", binary[0]); 15 printf("%d\n", binary[1]); 16 printf("%d\n", binary[2]); 17 printf("%d\n", binary[3]); 18 printf("%d\n", binary[4]); 19 printf("%d\n", binary[5]); 20 printf("%d\n", binary[6]); 21 22 // for (i = 0; i < *b_size; i++) ① 23 // { 24 // // printf("i:%d\n", i); 25 // printf("%1d\n", binary[i]); 26 // } 27 putchar('\n'); 28 // return 0; ② 29} 30 31void toBinaryArray(int *binary, int *b_size, int n) 32{ 33 int i, j; 34 for (i = 0; n > 0; i++) 35 { 36 binary[i] = n % 2; 37 n = n / 2; 38 } 39 *b_size = i; 40 // printf("%d\n", i); 41 // for (j = 0; j < i; j++) 42 // { 43 // printf("%1d", binary[j]); 44 // } 45 // putchar('\n'); 46} 47
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/16 15:41
2020/10/16 15:46 編集
2020/10/16 16:34