函数deque到数组无法正常工作

时间:2014-10-21 23:11:14

标签: c arrays void-pointers

您好我有这个问题。我做了这个功能:

void* deque2array(tDeque * D){

    void *arr = NULL;

    int i;
    tNodo * aux = D->ppio;

    for(i=0; i < D->cant; i++){
        arr = aux->elem;
        arr++;
        aux=aux->sig;
    }

    return arr;
}

然后我做了一个测试人员以确保这个功能正常工作。

tDeque * queue = createDeque();

int x=5;
int y=2;
int z=3;

insertInDeque(queue, &x);
insertInDeque(queue, &y);
insertInDeque(queue, &z);

int* pointer = deque2array(queue);
int i;

for(i=0; i<numberOfElements(queue); i++){
    pointer = pointer + i;
    printf(" %d ", *pointer);
}

但我得到的只是记忆地址,我不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

你做错了几件事。首先,您要发布一个不完整的代码示例。我们不知道D->ppioD->cantaux->sigaux->elem是什么,我们也不知道您是否在insertInDeque中正确设置了它们

deque2array

arr = aux->elem

你可能想要:

*arr = aux->elem

否则,该函数返回存储在最后aux->elem + 1中的值。如果它应该返回{{{},则很难理解如何在没有异常的情况下运行它。 1}}。

在你的测试员中:

void*

您正在循环的每次迭代中修改pointer = pointer + i 。因此,循环的第N次迭代的pointerpointer的原始值加上整数0到N的,而不是pointer的原始值加上pointer似乎是有意的。同样,如果此代码在没有异常的情况下运行,那将是一个奇迹,因为它将读取超出数组边界的内存。如果返回值足够大i,则可以保证产生错误。

一旦你解决了这些问题,如果我认为numberOfElements(queue)是我认为的那样,aux->elem做了我认为它做的事,你的新问题就是你要插入insertInDequexy到结构中的地址,而不是值,因此对于校正的测试代码来说,打印变量的地址是有意义的。截至目前,由于您正在读取未定义的内存位置,因此无论数据结构中的实际内容如何,​​结果都没有意义。