void enQ(int* q, int value){
if(q[0] == -1){
q[0] = value;
q[1] = -1;
return;
}
int found = 0;
int last_index;
int count = 0;
while(q[count] != -1){
count++;
}
last_index = count;
int i = 0;
while(q[i] != -1){
if(q[i] < value){
int j = last_index;
while(j != i){
q[j+1]=q[j];
j--;
}
q[i]=value;
found = 1;
break;
}
}
if(found == 0){
q[last_index] = value;
q[last_index+1] = -1;
}
}
int main(int argc, char* argv[])
{
int* q;
q[0] = -1; // initialize queue by making first element of new queue -1...
enQ(q,1);
}我在C中做了一个简单的优先级队列,问题是当我在int*上调用enQ时,程序分段错误。我不知道为什么。如何修复分段故障?
发布于 2013-10-11 03:05:34
您正在使用一个未初始化的指针,这意味着它将指向一个随机位置。要么将q声明为数组,例如
int q[10];或为其动态分配内存:
int *q = malloc(sizeof(int) * 10);这两种方法都为10个值创建了空间(索引0到9)。
同样,在最后一种情况下,在动态分配内存时,您必须记住,当您完成内存时,必须记住free内存。
您还可能希望跟踪大小,这样就不会排队查看许多项。
https://stackoverflow.com/questions/19309586
复制相似问题