1
私が書いたコードはOS Xでは問題なく動作しましたが、VS 2013コミュニティで実行したときに次のエラーが発生しました。malloc()と割り当て:OS Xでよく実行されるCコード。 Win 8.1ではなく
Unhandled exception at 0x001A3D22 in Myproject.exe: 0xC0000005:
Access violation writing location 0x00000000.
ここに問題のあるコードがあります。元のコードにはいくつかの行がありますが、以下のコードは同じエラーを生成します。
#include <stdio.h>
int main(void){
int **p;
p = (int **)malloc(sizeof(int *) * 5000);
for (int i = 0; i < 5000; i++)
p[i] = (int *)malloc(sizeof(int) * 5000 * 25);
for (int i = 0; i < 5000 * 25; i++) p[0][i] = 0;
for (int i = 1; i < 5000; i++) p[i][0] = 0; //<- error on this line
printf("donw!\n");
system("pause");
return 0;
}
エラーが発生した状態です。 iとpは赤色に着色されています。
name value type
i 4118 int
p 0x00758fe8 {0x0075de48 {0}} int * *
p[0] 0x0075de48 {0} int *
p[0][i] 0 int
p[i] 0x00000000 {???} int *
OSXとWindowsの違いは何ですか? OSXでは、gccでコードをコンパイルしました。
'malloc()'の戻り値を確認しましたか?私の計算が正しければ、あなたはたくさんのメモリを割り当てています - 約2.5 GiBです。どのくらいのメモリをWindows上で使用できるかを判断することは可能ですか? 32ビット版または64ビット版(各プラットフォームでコンパイルしていますが、Macでのデフォルトは32ビットコンパイルを選択しない限り64ビットになります)。 –
あなたのプログラムはたくさんのメモリを割り当てます。利用可能な領域がなくなった場合、mallocは0を返します。それを確認するのはあなたの責任です。これは、OSXとウィンドウの違いではなく、むしろ利用可能なメモリの問題です。 –