Вот простая реализация односвязного списка с функциями create()
, addnode()
и destroy()
. После того, как я вызвал функцию уничтожения, я напечатал head->val
, что должно вызвать ошибку сегментации, так как память освобождается. Однако это происходит только в режиме отладки. Если я собираю и запускаю, у программы не возникает проблем с печатью головы и даже всего списка.
Есть идеи, почему отладка и сборка дают разные результаты? Спасибо!
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct sllist{
int val;
struct sllist* next;
}
sllnode;
sllnode* create(int value)
{
sllnode* p =(sllnode*) malloc(sizeof(sllnode));
if(p == NULL)
return NULL;
p->val=value;
p->next=NULL;
return p;
}
sllnode* addnode(sllnode* head, int value)
{
sllnode* p =(sllnode*) malloc(sizeof(sllnode));
if(p == NULL)
return NULL;
p->val=value;
p->next=head;
return p;
}
void destroy(sllnode* head){
if(head == NULL)
return;
destroy(head->next);
free(head);
}
int main()
{
sllnode* head = create(6);
for(int i=1;i<=5;++i)
{
head=addnode(head,i+1);
}
sllnode* p = head;
while(p != NULL)
{
cout<<p->val;
p=p->next;
}
cout<<"\n"<<head<<"\n";
destroy(head);
cout<<head->val;
return 0;
}