u011022227
Starry_lyt
采纳率66.7%
2015-05-13 16:52

[紧急求救]C++:在循环结构中使用链表,程序运行终端

如题。(这是图像处理中的中值滤波,不过问题不涉及图像处理)
链表操作都没有问题,在另外的程序中测试过。这这段代码中第一次调用也没有问题,就是第二次到list.insert()时会跳出中断:
图片说明
这段代码如下:

    int i, j, x, y, p, t;//p为当前像素位置
    int a[arg*arg] = {0};
    linklist list;
    for (y = 0; y<nHeight - arg + 1; y++)
    {
        for (x = 0; x<nWidth - arg + 1; x++)
        {
            //计算每一点的算术均值滤波,p为模板左上角点
            p = x * 3 + y*nByteWidth;
            t = p;
            list.create();
            for (j = 0; j < arg; ++j)
            {
                for (i = 0; i < arg; ++i)
                {
                    ****list.insert(lpBits[t]);****
                    t += 3;
                }
                t = t - 3 * arg + nByteWidth;
            }//上面t指向原图中的位置,下面指向滤波后图像的位置
            list.display(a);
            t = p + (nByteWidth + 3)*(arg - 1) / 2;
            lpTemp[t] = a[(arg*arg+1)/2];
            lpTemp[t + 1] = lpTemp[t];
            lpTemp[t + 2] = lpTemp[t];
            list.del(list);
        }
    }

是一点一点设断点找到这个地方的。其他地方应该都没有问题。应该是我链表没delete好。
插入的函数:list.insert()如下:

 //插入一个节点并构成顺序链表
void linklist::insert(int pix)
{
    node *p, *q;
    q = new node;
    int i, len;
    len = listlength();
    p = head;
    for (i = 0; i < len; ++i)
    {
        if (pix < p->data)
        {
            q->data = p->data, q->next = p->next;
            p->data = pix, p->next = q;
            i = len;
        }
        else if (pix < p->next->data)
        {
            q->data = pix, q->next = p->next, p->next = q;
            i = len;
        }
        else
        {
            p = p->next;
        }
    }
    if (p->next == NULL)
        q->data = pix, p->next = q, q->next = NULL;
}

删除链表的函数list.del(list);如下:

 //销毁链表
void linklist::del(linklist list)
{
    node *d, *p;
    p = head;
    while (p != NULL){
        d = p;
        p = p->next;
        delete d;
    }
}

整个工程完整的代码如下代码
ps:明天晚上就要交作业了,这段代码还要用到其他地方。真心请教各位

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • xy707707 KrisRoofe 6年前

    期待解决方法,,关注着

    点赞 评论 复制链接分享
  • u011022227 Starry_lyt 6年前

    居然看不全……还好我复制了一下:我把代码重新发一下

     int i, j, x, y, p, t;//p为当前像素位置
        int a[arg*arg] = {0};
        linklist list;
        for (y = 0; y<nHeight - arg + 1; y++)
        {
            for (x = 0; x<nWidth - arg + 1; x++)
            {
                //计算每一点的算术均值滤波,p为模板左上角点
                p = x * 3 + y*nByteWidth;
                t = p;
                list.create();
                for (j = 0; j < arg; ++j)
                {
                    for (i = 0; i < arg; ++i)
                    {
                        list.insert(lpBits[t]);
                        t += 3;
                    }
                    t = t - 3 * arg + nByteWidth;
                }//上面t指向原图中的位置,下面指向滤波后图像的位置
                list.display(a);
                t = p + (nByteWidth + 3)*(arg - 1) / 2;
                lpTemp[t] = a[(arg*arg+1)/2];
                lpTemp[t + 1] = lpTemp[t];
                lpTemp[t + 2] = lpTemp[t];
                list.del(list);
            }
        }
    
    

    是一点一点设断点找到这个地方的。其他地方应该都没有问题。应该是我链表没delete好。
    整个工程完整的代码如下代码
    ps:明天晚上就要交作业了,这段代码还要用到其他地方。真心请教各位

    点赞 评论 复制链接分享

相关推荐