C 空指针分配错误。!

C 空指针分配错误。!,c,nullpointerexception,dijkstra,C,Nullpointerexception,Dijkstra,下面是Dijkstra最短路径算法的代码。该代码在小输入上运行良好,但对于200大小的2d数组,我需要它。所以我使用了动态内存分配。它仍然会给出一个空指针分配错误。有谁能帮我找到另一种方法来读取大尺寸的二维数组吗 #include<stdio.h> #include<conio.h> #include<string.h> void dij(int n,int v,int **c,int *d) { int i,u,count,w,f[300];

下面是Dijkstra最短路径算法的代码。该代码在小输入上运行良好,但对于200大小的2d数组,我需要它。所以我使用了动态内存分配。它仍然会给出一个空指针分配错误。有谁能帮我找到另一种方法来读取大尺寸的二维数组吗

#include<stdio.h>
#include<conio.h>
#include<string.h>


void dij(int n,int v,int **c,int *d)
{
    int i,u,count,w,f[300];
    int min;

    for(i=1;i<=n;i++)
    {
        f[i]=0;d[i]=c[v][i];
    }

    f[v]=1,d[v]=1;

    count=2;

    while(count<=n)
    {
        min=1000000;
        for(w=1;w<=n;w++)
            if((d[w]<min)&&!f[w])
            {
                min=d[w];u=w;
            }
        f[u]=1;
        count++;

        for(w=1;w<=n;w++)
            if(((d[u]+c[u][w])<d[w])&&!f[w])
                d[w]=d[u]+c[u][w];
    }

}


int main()
{
    int v=1,n=4,i,j,k,len;
    char str[20];
    int **c,*d,val;

    d=(int*)malloc(n*sizeof(int));
    c=(int**)malloc(n*sizeof(int*));
    for(i=1;i<=n;i++)
        c[i]=(int*)malloc(n*sizeof(int));

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            c[i][j]=0;
    for(k=0;k<=n;k++)
    {
        do
        {
            scanf("%s",&str);
            len=strlen(str);
            if(len>3)
            {
                sscanf(str,"%d,%d",&j,&val);
                c[k][j]=val;
            }
            else break;
        }
        while(1);
    }

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            if(c[i][j]==0)
                c[i][j]=1000000;
        }

    printf("enter the source\n");

    scanf("%d",&v);

    dij(n,v,c,d);

    printf("shortest path from\n");

    for(i=1;i<=n;i++)
        if(i!=v)
            printf("%d -> %d=%d\n",v,i,d[i]);
    getch();
}
#包括
#包括
#包括
无效dij(整数n,整数v,整数**c,整数*d)
{
整数i,u,count,w,f[300];
int-min;

对于(i=1;i
for(i=1;if为[300]),您是否尝试了298 299 300 301和302?全部相同或300301302为错误

在函数dij()中,i的最大值是n,当您将n设置为大于300时,它会给出错误

 int i,u,count,w,f[300];  // f[300]<---------constant size
 int min;


  for(i=1;i<=n;i++)

  {
     f[i]=0;d[i]=c[v][i];// here i goes to n, while f[] is f[300]

   }

inti,u,count,w,f[300];/f[300]…条件/测试通常是“少”
@Levon,是的,这是开始是
0
,长度是
n
;-)@MichaelKrelin hacker的逻辑结果。是的,我知道。我不是在批评你,这似乎是一个合适的声明(因为它不见了,所以我提供了:)@Levon,我也没有批评你的评论!我同意你的意见!)@tuğrulbüyükıkık,我甚至没有尝试阅读整个代码,我直接进入内存分配,一旦你调用未定义的,任何事情都可能发生。
 int i,u,count,w,f[300];  // f[300]<---------constant size
 int min;


  for(i=1;i<=n;i++)

  {
     f[i]=0;d[i]=c[v][i];// here i goes to n, while f[] is f[300]

   }