Я пытался читать cfg в multilinklist, но im получаю эту ошибку, пожалуйста, помогите кому-нибудь. Он продолжает давать эту ошибку. Я не думаю, что есть какая-то ошибка. Пожалуйста, проверьте этот код и скажите мне, где ошибка, которая приводит к аварийному завершению программы, за исключением присоединенной в картинезавершение вызова после вызова экземпляра 'std :: logic_error' what(): basic_string :: _ S_construct null недействителен
#include <iostream> #include <fstream> #include <cstring> using namespace std; struct prod_list{ string production; struct prod_list *next; }*head_p=NULL; //Node for linked list to store Non terminals struct rule_list{ char non_terminal; struct prod_list *first; struct rule_list *next; }*head_r=NULL; // Global variable struct prod_list *temp_p,*prev_p=NULL,*first_p=NULL,*temp1_p=NULL,*temp2_p,*newTemp; struct rule_list *temp_r,*prev_r=NULL,*first_r=NULL ,*temp1_r=NULL; prod_list *adding_productions_of_the_rule(string line); prod_list *add_node(prod_list *root, string production); int main() { string line; ifstream file ("cfg.txt"); if (file.is_open()) { while (getline (file,line)) { head_p = NULL; // Creating rule_list node temp_r = new rule_list; temp_r->non_terminal = line[0]; head_p = adding_productions_of_the_rule(line); temp_r->first = head_p; temp_r->next = NULL; if(head_r == NULL) { head_r = temp_r; prev_r = temp_r; } else { prev_r->next = temp_r; prev_r = temp_r; } } file.close(); } else { cout << "Unable to open file"; } return 0; } prod_list *adding_productions_of_the_rule(string line) { string prod = NULL; // Splitting line after arrow in cfg rule line. line = line.substr(3,line.length()); // cout << "The cfg is "+line << endl; // declaring character array of line's length char ch[line.length()]={0}; // memset(ch,'0',line.length()); // cout << sizeof(ch) << endl; // storing line in character array and printing character array for(int i=0; i<line.length(); i++){ ch[i] = line[i]; // Displaying the characters stored in character array from string line. // cout << ch[i]; } // cout << endl; char *point; point = strtok(ch, "|"); while(point != NULL){ // cout << point << endl; // Assigning each production from the cfg rule to an array of strings // production[i] = point; // cout << production[i] << endl; // Creating prod_list node prod = point; head_p = add_node(head_p, prod); point = strtok(NULL, "|"); // i++; } return head_p; } prod_list *add_node(prod_list *root, string production){ prod_list *next_ptr = NULL; prod_list *prev_ptr = NULL; if(root == NULL){ //list is empty if((root = new prod_list) != NULL){ next_ptr = root; // cin >> next_ptr->title; next_ptr->production = production; next_ptr->next = NULL; }else{ cout << "Error: Unable to allocate memory. " << endl; return NULL; } return next_ptr; }else{ //list has members. next_ptr = root; while(next_ptr->next != NULL){ next_ptr = next_ptr->next; } prev_ptr = next_ptr; if((next_ptr = new prod_list)!= NULL){ prev_ptr->next = next_ptr; next_ptr->production = production; next_ptr->next = NULL; }else{ cout << "Error: Unable to allocate memory " << endl; } } return root; }
** Я пытался читать CFG в multilinklist, но им получаю эту ошибку, пожалуйста, кто-то помощь **
https://i.stack.imgur.com/AgNXB.png
Посмотрите, что отладка кнопки программы? Может пригодиться ... – user4581301