2014-10-29 49 views
-1
void push(char name, int key) 
{ 
    Node *character = NULL; 
    character->link = tos; 
    name = character->data; 
    key = character->precedence; 
    push(character); 
}; 

我的我的兩個例外:不斷收到處理錯誤。導致我的計劃,以打破

First-chance exception at 0x011460C2 in Program Assignment 2new.exe: 0xC0000005: Access violation writing location 0x00000008. 
Unhandled exception at 0x011460C2 in Program Assignment 2new.exe: 0xC0000005: Access violation writing location 0x00000008. 

而且tos早在我的代碼已經定義一個指針。

+2

您正在聲明一個指針,並將其賦值爲NULL,然後立即對其進行解引用。你想在這裏做什麼?沒有看到您的其他代碼很難說。 – 2014-10-29 20:37:06

+0

push(char,int):創建一個新節點並將其放置在TOS(堆棧頂部)上,您將需要爲char和int參數提供變量 – 2014-10-29 20:46:11

回答

0

您聲明Node類型的指針「字符」並將其設爲null。你永遠不會在那個指針上調用'新'。你必須調用new來創建一個字符的實例,否則character-> link沒有有效的內存位置,你會得到異常。

*還記得打電話給刪除空間回來。

+0

在Node *字符前面添加新節點僅爲我提供了一個不同的缺少分號的錯誤 – 2014-10-29 20:49:37

+0

@VontaTreiBrinson那是因爲那是錯誤的地方。試試'Node * character = new Node;'。並獲得一本好書來研究。 – molbdnilo 2014-10-29 20:52:52

+0

你會建議什麼書? – 2014-10-29 21:00:12

0
void push(char name, int key) 
    { 
     Node *character = new (std::nothrow) Node; 
     if(0 != character){ 
      character->link = tos; 
      name = character->data; 
      key = character->precedence; 
      push(character); 
     } 
     else{ 
      //Give an error message 
     } 
    } 

是我如何重新寫你必須避免一些錯誤。

最初您將字符設置爲NULL,然後嘗試訪問它,這是未定義的行爲。

相關問題