簡體   English   中英

指針導致訪問沖突

[英]Pointer causes access violation

我有一個控制台應用程序從控制台讀取一些char數據,然后放入一個結構。 這個結構用作鏈表,當它被構造時,我保持一個指針指向第一個列表元素,一個指針用於運行列表。 我發生的事情是,當我第一次瀏覽我的列表並將其內容寫入控制台時,一切都在完美地運行。 當我后來想要將我的運行指針設置為列表最后一個元素時,它會隨着c000005訪問沖突錯誤而崩潰。 我會告訴你我的代碼中有趣的部分:

我的結構的定義:

struct musikdaten {
    char interpret[150];
    char titel[150];
    struct musikdaten* next;
};

打印列表內容:

while (it != NULL) {
    cout << it->interpret << ": " << it->titel << "\n";
    cout << "next: " << it->next << "\n";
    it = it->next;
}

將“it”設置為列表的最后一個元素:

while (true) {
    if (it->next == NULL) {
        cout << "Assigning some memory...\n";
        it->next = new musikdaten;
        break;
    }
    else it = it->next;
}

但是,當列表包含兩個以上的元素時,最后一部分會不斷崩潰。 注意:當從控制台讀取內容時添加新的列表元素時,下一個指針始終初始化為NULL。

您應該使用NULL初始化next成員以指示列表的結尾:

it->next = new musikdaten;
it->next->next = NULL;

或者添加默認構造函數:

struct musikdaten {
musikdaten() { next = NULL; /*TODO: init other members*/}     
char interpret[150];
char titel[150];
struct musikdaten* next;
};

暫無
暫無

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

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