如题。(这是图像处理中的中值滤波,不过问题不涉及图像处理)
链表操作都没有问题,在另外的程序中测试过。这这段代码中第一次调用也没有问题,就是第二次到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:明天晚上就要交作业了,这段代码还要用到其他地方。真心请教各位