2015-05-18 4 views
-1

У меня возникла ошибка времени выполнения при выполнении ниже кода C++. Может кто-то помочь мне, почему я получаю эту ошибку времени выполнения.Ошибка программирования на C++ - Ошибка времени выполнения

#include<iostream> 
using namespace std; 

struct node 
{ 
    int data; 
    struct node *left; 
    struct node *right; 
    struct node *rlink; 
}; 

struct qnode 
{ 
    struct node *lnode; 
    int level; 
}; 

struct node* newnode (int n) 
{ 
    struct node *temp; 
    temp= new struct node; 
    temp->data=n; 
    temp->left=NULL; 
    temp->right=NULL; 
    temp->rlink=NULL; 
    return temp; 
} 

void link (struct node *n, int level) 
{ 
    struct qnode *qn; 
    struct qnode *current, *next; 
    struct qnode nextd; 
    next = &nextd; 

    (next->lnode)->data=5; 
    cout << (next->lnode)->data << endl; 

} 


int main() 
{ 
    struct node *root = newnode(10); 
    root->left  = newnode(8); 
    root->right  = newnode(2); 
    root->left->left = newnode(3); 


    link (root, 0); 
    return 0; 


    } 
+2

Он работает без ошибок для меня, присоедините свою ошибку. –

ответ

2

В функции связи, вы сделали это:

next = &nextd; 

nextd не был инициализирован и содержит значения барахла, когда его адрес назначается на следующий. Следующие строки затем попытаются получить к нему доступ, и это приведет к ошибке нарушения доступа.

2

Проблема заключается в ссылке:

void link (struct node *n, int level) 
{ 
    struct qnode *qn; 
    struct qnode *current, *next; 
    struct qnode nextd; 
    // BUG 1 = nextd is uninitialized 
    // BUG 2 - nextd is a stack-based variable, becomes junk when function exits 
    next = &nextd; 
    // Becuase nextd is uninitialized, next->lnode points to garbage. Kaboom! 
    (next->lnode)->data=5; 
    cout << (next->lnode)->data << endl; 

} 
Смежные вопросы