[解決済み] std::logic_error' のインスタンスを投げた後に呼び出される terminate what(): basic_string::_S_construct null not valid
2022-01-30 23:26:21
質問
マルチリンクリストにCFGを読み込もうとしているのですが、このエラーが発生します。このエラーを出し続けています。エラーはないと思うのですが。このコードをチェックして、プログラムが画像に添付された例外でクラッシュする原因となるエラーはどこなのか教えてください。
<ブロッククオート
#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;
}
**I have been trying to read cfg into the multilinklist but im getting this error please someone help **.
https://i.stack.imgur.com/AgNXB.png
解決方法は?
エラーが発生するケースは、ごくわずかです。
#include <string>
int main() {
std::string prod = NULL;
}
何が起こっているかというと、これは
std::string
をNULLポインタから取り出す。明らかに、そこには
string
そのため、唯一できることとして、助けを求める叫びをあげました。
解決策
何も割り当てないでください。
std::string
はデフォルトで空の文字列を構築します。
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】構造体のベクター初期化について
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】変数やフィールドがvoid宣言されている
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】'std::cout'への未定義の参照