嘿伙计们我有链接列表的问题。在我尝试将函数调用到链表中的搜索元素后,我的程序崩溃了。我正在生成数组,然后使用链接列表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);
}
}
答案 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()
函数崩溃......那么调试器就是你的朋友。