C ++程序与链接列表崩溃

时间:2017-04-15 10:09:08

标签: c++ error-handling linked-list

嘿伙计们我有链接列表的问题。在我尝试将函数调用到链表中的搜索元素后,我的程序崩溃了。我正在生成数组,然后使用链接列表outta数组元素。现在,当我试图在链表中找到0时,它会崩溃,我不知道为什么。谢谢你的考虑

#include <iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;

//ARRAY GENERATOR
int *gen_arr(int V[], int n, int dg, int gg){
srand(41);
for(int i=0; i<n; i++){
    V[i]=1+(rand() % gg) ;
}
return V;
}

struct node{
int data;
node* next;
};

void SearchRecursive(node* Ptr, int number);
int main(){
int dg,gg;
int n=10;       
int* V = NULL;   
V = new int[n]; 

cout<<"Unesite vrijednost donje granice: "<<endl;
cin>>dg;
cout<<"Unesite vrijednost gornje granice: "<<endl;
cin>>gg;

V[n]=*gen_arr(V, n, dg, gg);
/*for(int i=0;i<n;i++){
    cout<<V[i]<<" ";
}*/
node * nx = new node;
node* head = nx;
node* t = nx;
nx->data=V[0];
for(int i=1;i<n;i++){
    nx = new node;
    nx->data = V[i];
    t->next = nx;
    t = nx;
}
nx->next=NULL;

t = head;
cout<<endl;
while(t != NULL){
    cout<<t->data<<" ";
    t = t->next;
}

cout<<endl;
cout<<"IIII"<<endl;
clock_t k;
k = clock();
SearchRecursive(head, 0);
k = clock()-k;
printf( "Vrijeme trajanja je %dms\n",k );   

return 0;
}

void SearchRecursive(node* Ptr, int number){
if(Ptr == NULL){
    cout<<"-1"<<endl;
}
else if(Ptr->data == number){
    cout<<"Pronadeno"<<endl;
}
else{
    SearchRecursive(Ptr->next, number);
}
}

2 个答案:

答案 0 :(得分:0)

首先,您的发电机似乎不正确。更正版本,返回值[dg,gg]:

//ARRAY GENERATOR
int *gen_arr(int V[], int n, int dg, int gg){
    srand(41);
    for(int i=0; i<n; i++){
        V[i]=dg+(rand() % (gg-dg));
    }
    return V;
}

您能更具体地了解输入程序崩溃的原因吗?

答案 1 :(得分:0)

你的线路上有错误:
V[n]=*gen_arr(V, n, dg, gg);
可以翻译为将值V[0]写入V[n],即。超出你的数组范围。可能导致段故障或损坏您的程序存储器 如果要复制c-array,则应使用memcpy()。在你的情况下,它没有必要,因为int V[]的参数gen_arr()是指向你的数组的指针(而不是副本),所以你直接填写它来自你的 - 循环。

否则,没有明显的原因导致SearchRecursive()函数崩溃......那么调试器就是你的朋友。