2016-05-27 12 views
0

Я пишу код для реализации матрицы смещения для графика. Но я получаю ошибку времени выполнения. Может кто-нибудь предложить, где я ошибаюсь?Матрица смещения графа

Код:

#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 

struct Graph{ 
    int V; 
    int E; 
    int **Adj; 
}; 

void test(struct Graph *graph) 
{ 
    graph->E = 5; 
    graph->V = 4; 
    graph->Adj = malloc(sizeof(graph->V * graph->V)); 
    graph->Adj[0][0] = 9; 
    graph->Adj[0][1] = 7; 
    graph->Adj[0][2] = 2; 
    graph->Adj[0][3] = 5; 
    printf("Hello %d\n",graph->Adj[0][2]);  
} 
int main() 
{ 
    struct Graph *graph = malloc(sizeof(struct Graph)); 
    test(graph); 
} 

Если бы я сделать то же самое в основной функции он works.I не понимаю, что я делаю неправильно, когда я пишу функции тестирования и сделать это?

код, когда сделано в основной функции:

#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 

struct Graph{ 
    int V; 
    int E; 
    int **Adj; 
}; 


int main() 
{ 
    struct Graph *graph = malloc(sizeof(struct Graph)); 
    graph->E = 5; 
    graph->V = 4; 
    graph->Adj = malloc(sizeof(graph->V * graph->V)); 
    graph->Adj[0][0] = 9; 
    graph->Adj[0][1] = 7; 
    graph->Adj[0][2] = 2; 
    graph->Adj[0][3] = 5; 
    printf("Hello %d\n",graph->Adj[0][2]); 

} 

Получение отладки выполнения error.While для test function он работает до graph->Adj = malloc(sizeof(graph->V * graph->V)); но graph->Adj[0][0] = 9; это дает error.Why ???

+0

Что такое ошибка? – philo

+0

Обновлена ​​ошибка. –

ответ

0

Вы делаете неправильный malloc. Вы используете указатель на указатель. Таким образом, вам нужно сначала malloc получить динамический указатель массива. Затем вам придется выделить его для каждой строки.

Попробуйте это:

graph->Adj = (int **)malloc(graph->v * sizeof(int *)); 
    for (i=0; i<graph->v; i++) 
     graph->Adj[i] = (int *)malloc(graph->v * sizeof(int)); 
+0

Спасибо за ваш ответ. Я знаю этот метод, но я хочу знать, почему мой метод неправильный? –

+0

Обновлен ответ –

+0

Но когда я делаю то же самое в основной функции, он работает. Почему там, а не в тестовой функции? –

 Смежные вопросы

  • Нет связанных вопросов^_^