malloc()和assign:C代码在OSX中运行良好;不是赢8.1

malloc()和assign:C代码在OSX中运行良好;不是赢8.1,c,windows,macos,malloc,C,Windows,Macos,Malloc,我编写的代码在OSX中运行没有任何问题,但在VS2013社区上运行时,我遇到了以下错误 Unhandled exception at 0x001A3D22 in Myproject.exe: 0xC0000005: Access violation writing location 0x00000000. 下面是有问题的代码。原始代码还有一些行,但下面的代码本身会生成相同的错误 #include <stdio.h> int main(void){ int **p;

我编写的代码在OSX中运行没有任何问题,但在VS2013社区上运行时,我遇到了以下错误

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;
}

谁能告诉我OSX和Windows之间的区别是什么?在OSX中,我使用gcc编译代码。

p[I]
NULL
时,很可能是
malloc
未能分配所需内存的结果。添加检查以检测该问题

p = (int **)malloc(sizeof(int *) * 5000);
if ( p == NULL )
{
   // Deal with error.
}

for (int i = 0; i < 5000; i++)
{
   p[i] = (int *)malloc(sizeof(int) * 5000 * 25);
   if ( p[i] == NULL )
   {
      // Deal with error
   }
}
p=(int**)malloc(sizeof(int*)*5000);
if(p==NULL)
{
//处理错误。
}
对于(int i=0;i<5000;i++)
{
p[i]=(int*)malloc(sizeof(int)*5000*25);
如果(p[i]==NULL)
{
//处理错误
}
}

您是否检查了
malloc()
中的返回值?您分配了大量内存—如果我的计算正确,大约2.5 GiB。是否可以确定您可以在Windows上使用多少内存?您的编译是32位还是64位(在每个平台上;Mac上的默认值是64位,除非您选择32位编译)。您的程序分配了大量内存。如果可用空间不足,malloc将返回0。你有责任核实这一点。这不是OSX和windows之间的区别,而是可用内存的问题。
p = (int **)malloc(sizeof(int *) * 5000);
if ( p == NULL )
{
   // Deal with error.
}

for (int i = 0; i < 5000; i++)
{
   p[i] = (int *)malloc(sizeof(int) * 5000 * 25);
   if ( p[i] == NULL )
   {
      // Deal with error
   }
}