c言語でcallocを用いて二次元配列を確保して、配列の中身を変更して出力しようとしています。
コンパイルはできるのですが、正しく動作しません。配列の中身を変更しないときには動作しないため、その周辺が間違っていると思います。誤っている部分を教えていただきたいです。
実行すると以下のようなエラーになります。
powershell
1プログラム 'a.exe' の実行に失敗しました: アクセスが拒否されました。発生場所 行:1 文字:1 2+ ./a.exe 3+ ~~~~~~~。 4発生場所 行:1 文字:1 5+ ./a.exe 6+ ~~~~~~~ 7 + CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException 8 + FullyQualifiedErrorId : NativeCommandFailed
実行したコード
c
1#include <stdio.h> 2#include <stdlib.h> 3 4#define ARRAY_COL_NUM 6 // 配列の列の数 5#define ARRAY_ROW_NUM 5 // 配列の行の数 6 7int main(void) 8{ 9 int ni, nj; 10 // 二次元配列を動的に確保 11 double** A = calloc( ARRAY_ROW_NUM, sizeof(double*) ); 12 for( int i = 0; i < ARRAY_ROW_NUM; ++i ){ 13 A[i] = calloc( ARRAY_COL_NUM, sizeof(double) ); 14 } 15 // 配列の中身を変更 16 17 for(ni = 0; ni < ARRAY_ROW_NUM; ni++){ 18 for(nj =0 ; nj < ARRAY_COL_NUM; nj++){ 19 A[ni][nj] = 1.0; 20 }} 21 // 二次元配列の要素を出力 22 for( int i = 0; i < ARRAY_ROW_NUM; ++i ){ 23 for( int j = 0; j < ARRAY_COL_NUM; ++j ){ 24 printf( "%f ", A[i][j] ); 25 } 26 printf( "\n" ); 27 } 28 29 // メモリ解放 30 for( int i = 0; i < ARRAY_ROW_NUM; ++i ){ 31 free( A[i] ); 32 } 33 free( A ); 34 35 return 0; 36}
回答1件
あなたの回答
tips
プレビュー