2016-06-12 5 views
-1

に私はCで89401個の要素を持つ1次元配列にするためにしようとしている:例外スローエラーC

double **A = (double**)malloc(89401*sizeof(double*)); 

for (i = 0; i<89401; i++)  

    A[i] = (double*)malloc(89401*sizeof(double)); 

をしかし、私はこのエラーを取得しておいてください。

Exception thrown at 0x003F61E0 in final project 2.exe: 0xC0000005: Access violation writing location 0x00000000. 

私はできません何が問題なのか理解する。私は以前に尋ねられた質問をサイトで検索しましたが、どれも私に貢献しませんでした。

この例外のハンドラがある場合、プログラムは安全に続行されます。

+0

「A」が指している要素に何かを割り当てる前に、「NULL」でないかどうかを確認してください。 – MikeCAT

+1

'sizeof(double)'が8の場合、このwilは約59.5GBのメモリを要求します。あなたのシステムには、この大きなデータを格納するのに十分なRAM(スワップ)がありますか? – MikeCAT

+1

**常に**プログラムの実行に関連する関数のエラー結果をチェックしてください。また、 'malloc'&friendsや' void * 'の結果をC言語でキャストしないでください! – Olaf

答えて

1

あなたは2つの間違いを犯しました。 最初に、「89401のサイズの1d配列」を作成しようとしています。実際には89401 * 89401倍を割り当てようとしますが、これは2D配列と思われます。あなたが8バイトの倍数を持っている場合、@MikeCATが書いたように、これは膨大な数、89401 * 89401 * 8バイトです。 2番目は、mallocによるメモリ割り当てが成功しなかった場合、つまり結果がNULLの場合に処理しないことです。