首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中尝试在优先级队列中加入队列时的seg-错误

在C中尝试在优先级队列中加入队列时的seg-错误
EN

Stack Overflow用户
提问于 2013-10-11 03:03:07
回答 1查看 85关注 0票数 0
代码语言:javascript
复制
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时,程序分段错误。我不知道为什么。如何修复分段故障?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-11 03:05:34

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

代码语言:javascript
复制
int q[10];

或为其动态分配内存:

代码语言:javascript
复制
int *q = malloc(sizeof(int) * 10);

这两种方法都为10个值创建了空间(索引09)。

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

您还可能希望跟踪大小,这样就不会排队查看许多项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19309586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档