2013-08-31 6 views
0

Как я могу получить доступ к указателю в виде указателя структуры? с кодом сильфоном, вызывая addBow() дает мне ошибку сегментации (ядро сбрасывали) ошибкудвойной указатель на структуру внутри структуры

typedef struct 
{ 
    int size; 
    tCity **cities; 

}tGraph; 

//para iniciar el grafo 
void initGraph(tGraph *graph, int size) 
{ 
    graph = (tGraph*)malloc(sizeof(tGraph)); 
    graph->cities = (tCity**)malloc(sizeof(tCity*) * size); 
    graph->size = size; 
} 

//agrega un arco entre ciudades 
void addBow(tGraph *graph, int id, tCity *city) 
{ 
    if (graph->cities[id] == NULL) 
    {  
     graph->cities[id] = city; 
    } 
    else 
    { 
     tCity *cur = graph->cities[id]; 
     while (getNext(cur) != NULL) 
     { 
      cur = getNext(cur); 
     } 
     setNext(cur, city); 
    } 
}  

который является правильным синтаксисом для граф-> городов [ID] ??

Благодаря

РЕШЕНИЕ: редактирование InitGraph решить проблему, так как память не была выделена

tGraph* initGraph(int size) 
{ 
    tGraph *graph = (tGraph*)malloc(sizeof(tGraph)); 
    graph->cities = (tCity**)malloc(sizeof(tCity*) * size); 
    graph->size = size; 
    return graph; 
} 

ответ

1

Вы должны либо иметь InitGraph() взять (** график) или вернуть график. Поскольку адрес malloc графика является локальным для initGraph.

Что-то вроде:

void initGraph(tGraph **graph, int size) 
{ 
    tgraph *temp; 
    temp = (tGraph*)malloc(sizeof(tGraph*)); 
    temp->cities = (tCity**)malloc(sizeof(tCity*) * size); 
    temp->size = size; 
    *graph = temp; 
} 
+1

Он хранит там указатели. – Inspired

+0

@Inspired. Согласовано. Обновлен ответ –

+0

@ManojPandey Thaanks, который решает его, обновляется. – JoseMiguel

1

graph = (tGraph*)malloc(sizeof(tGraph*));

Существует одна из ваших проблем ... должно быть graph = malloc(sizeof(tGraph));

+2

Это проблема, но я предполагаю, что авария в настоящее время вызвана 'initGraph' распределением памяти в копию указателя, переданного вызывающим. то есть выделение в локальный, который просачивается, как только функция возвращает – simonc

+0

. Хороший вызов @simonc Я не узнал об этом. –

0

Make initGraph() возвращает указатель на tGraph.