0
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 时,程序会出现段错误。我不知道为什么。如何修复段错误?

4

1 回答 1

2

您正在使用未初始化的指针,这意味着它将指向一个随机位置。要么声明q为数组,例如

int q[10];

或者为它动态分配内存:

int *q = malloc(sizeof(int) * 10);

这两个都为十个值(索引09)创建空间。

同样在最后一种情况下,您动态分配内存,您必须在free完成后记住内存。


您可能还想跟踪大小,这样您就不会排队很多项目。

于 2013-10-11T03:05:34.493 回答