簡體   English   中英

如何正確讀取 .txt 文件並使用指針 C++ 分配給結構

[英]How to properly read from .txt file and assign to structs with pointer, C++

我正在嘗試讀取文件並對其進行反序列化。 我一次輸入兩個字符串並將其分配給一些變量foobar 首先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 Readstruct NodeReading只是struct Read的位字段的副本和指向其字符串的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM