Ошибка сегментации после выполнения кода (ошибка getenv.c: 84) - PullRequest
0 голосов
/ 30 сентября 2018

Мой код прост ... он просто получает два предложения вроде networkService(webServer, httpd,TCP, 80, apache) и hacl(internet, webServer, TCP, 80).Из этих двух предложений код просто извлекает протокол и порт из каждого предложения.

Итак, для предложения: networkService(webServer, httpd,TCP, 80, apache) протокол будет TCP и порт 80

Для предложения:hacl(internet, webServer, TCP, 80) протокол будет TCP и порт 80

Это все, что делает мой код, и я получаю ошибку сегментации после выполнения ... это мой код ниже:

Все, что эта функция делает, это получает протокол после первой запятой и порт после третьей запятой

void set_port_service(char node_name[], char protocol[], char port[]){

char* sep;
sep = node_name;

int comma_num = 0;
int i = 0; int k =0;

printf("node name: %s\n\n", node_name);

while(comma_num < 4){

    if(*sep == ',')
        comma_num++;

    sep++;

    if(comma_num == 2){

        if(*sep != ',' && *sep != ')'){

            protocol[i] = *sep;
            i++;                
        }           

    }

    if(comma_num == 3){

        if(*sep != ',' && *sep != ')'){

            port[k] = *sep;
            k++;                
        }           

    }

}

protocol[i] = 0; port[k] = 0;

remove_char(protocol); 
remove_char(port);}

Все функции, перечисленные ниже, это получение протокола и порта из предыдущей функции и добавление их в vc_node-> порт и vc_node-> протокол

void convert_to_dag(graph_node** dag, graph_node** sag){ //directed acyclic graph

struct Graph_Node data = { .next = NULL, .edge = NULL, .hosts = NULL, .predecessor_edge = NULL, .parent_list = NULL};

graph_node* sag_aux = *sag;

while(sag_aux != NULL){ //set vc nodes ports and services

    // service leaf node
    if(strstr(sag_aux->node_name, "networkServiceInfo") || strstr(sag_aux->node_name, "hacl")){  


        //printf("\n\nnode name: %s\n\n", sag_aux->node_name);

        graph_edge* edge_aux = sag_aux->edge;

        printf("Part 1\n\n");

        while(edge_aux != NULL){ 

            char protocol[50]; char port[50];

            memset(protocol, 0, sizeof(protocol)); memset(port, 0, sizeof(port)); 

            set_port_service(sag_aux->node_name, protocol, port); //extract port and protocol from leaf node

            graph_node* vc_node = edge_aux->node; // leaf pointing to vc node

            strcpy(vc_node->protocol, protocol); strcpy(vc_node->port, port); //copy to vc node

            edge_aux = edge_aux->next;

        }

        printf("protocol: %s ", sag_aux->edge->node->protocol); 
        printf("port: %s\n\n",sag_aux->edge->node->port);

        printf("Part 2\n\n"); 

    }

    sag_aux = sag_aux->next;

}

sag_aux = *sag;}

И я получаю ошибку сегментации ПОСЛЕ выполнения кода.Это просто не имеет никакого смысла ... кто-нибудь знает причину этого?

Часть кода, которая вызывает ошибку сегментации, это strstr(sag_aux->node_name, "hacl") в операторе if ...

ПРОВЕРЬТЕ КОД

...