[英]How to properly read from .txt file and assign to structs with pointer, C++
我正在嘗試讀取文件並對其進行反序列化。 我一次輸入兩個字符串並將其分配給一些變量foo
和bar
。 首先foo
被分配給NODE2
和 ofc 位向量,然后bar
被分配給NODE2
,但是當這種情況發生時foo
也被分配給NODE2
。 我懷疑它與指針有關,但我希望struct
NodeReading
有一個指向字符串的指針,以釋放我最終將構建的樹的空間。 我計划在二叉樹中擁有數十萬個NodeReadings
。 我只想將字符串存儲為指針,因為字符串也會很大。 只有葉子會存儲一個實際的字符串(內部節點用於根據它們的位集進行導航)。
#include <iostream>
#include <fstream>
using namespace std;
struct Read {
string dna;
bitset<5> bf;
};
struct NodeReading {
bitset<5> bloom_filter;
string* dna_string;
};
static const string file = "tree.txt";
ifstream ist {file};
//could be a pair return instead of Read, but I like it this way.
Read read_line() {
string a;
bitset<5> b;
ist >> a >> b;
return Read {a, b};
}
NodeReading write_to_tree() {
Read s = read_line();
NodeReading hey {s.bf, &s.dna};
return hey;
}
int main {
NodeReading foo = write_to_tree(); //gets assigned NODE1 at first
NodeReading bar = write_to_tree(); //gets assigned NODE2, and then foo also gets assigned NODE2
return 0;
}
樹.txt:
NODE1 11110 NODE2 11110
無論發生什么實際上都是未定義的行為。 如果您在這兩行之間進行其他處理 - NodeReading foo = write_to_tree();
& NodeReading bar = write_to_tree();
然后嘗試訪問foo
,那么您的應用程序有可能由於分段錯誤而崩潰。
在write_to_tree()
內部,您的變量Read s
未在堆上分配,因此,一旦您從該 function 返回,變量Read s
就會從 scope 中消失,並且您丟失了其中的所有數據。 您需要在堆上分配它。
在您的代碼struct NodeReading
看起來是多余的。 您可以直接使用struct Read
, struct NodeReading
只是struct Read
的位字段的副本和指向其字符串的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.