2013-08-16 77 views
0

我的程序正在使用图形,并且我正在尝试创建边的向量。我在程序的边缘类型是这个:构造向量通过函数

typedef struct arco{ 
    TipoNodo p, s; 
    int peso; 
    }arco; 

其中p和s的顶点,而比索是多少长的边缘。

我想创建一个由邻接矩阵组成的边的向量,但是当我将类型arco的向量传递给我的函数时,我的程序会引发运行时错误。我应该如何将arcos的矢量传递给我的函数,并修改他的元素?

主要代码:

case 'f': 
     printf("Algoritmo di Dijkstra. Scrivere Nodo i di partenza: "); 
     scanf("%d", &i); 
     arco vet[MaxArchi]; 

      int dimensione; 
      printf("fuck\n"); 
//I'm debugging just the matrix part, becouse I think that the error with adjacency list is the same. 
      if(matlist=='m') dimensione = CodaMinPrioritaMatrice(grafoMat, vet); else dimensione = CodaMinPrioritaLista(grafoList, vet); 
//printing the array, the program doesn't arrive here. 
      for(peso = 0; peso <dimensione; peso++) printf("%d->%d, (%d)\n", vet[peso].p, vet[peso].s, vet[peso].peso); 
      break; 

功能:

int CodaMinPrioritaMatrice(GrafoMatrice *grafo, arco *vet[]){ 
     int dimensione; 
     TipoNodo i, j; 
     for(i=0; i<NumNodi; i++) 
      for(j = 0; j<NumNodi; j++) 
       if(grafo->matr_adiacenza[i][j] != 0){ 
              //the program stops here 
        //*vet[dimensione] = malloc(sizeof(arco)); 
        vet[dimensione].p = i; 
        vet[dimensione].s = j; 
        vet[dimensione].peso = grafo->matr_adiacenza[i][j]; 

        dimensione++;      
       } 
     return dimensione; 
} 

我不发表我的整个计划,因为我写的更多或较少的代码600行,我所知道的关于图

谢谢你的每一个机构

贾科莫。

+0

您将它作为一个值传递:而是将其作为参考传递给它:CodaMinPrioritaMatrice(grafoMat,&vet) – Magn3s1um

+0

@M您可能意思是“传递指向它的指针”。在C中没有引用的通过。 – 2013-08-16 20:03:38

+0

我认为这个向量是作为指针传递的..也没有'&'。即如果我修改了一个函数中的矢量值,这个值也在主程序中修改了,如果我通过向量时没有'&' – giacomotb

回答

2

我认为你需要在你的代码多一个变化.. 。

int dimensione=0; 

你正在使用一个没有初始化的变量。

这可能对你有帮助。

+0

谢谢,这是我愚蠢的错误! – giacomotb

1

这应该可以解决你的代码 -

变化的函数定义的:

int CodaMinPrioritaMatrice(GrafoMatrice *grafo, arco *vet[]){ 

要:

int CodaMinPrioritaMatrice(GrafoMatrice *grafo, arco *vet){ 
+0

谢谢,但代码仍然没有工作 – giacomotb