gpt4 book ai didi

c - 函数 deque 到数组不起作用

转载 作者:行者123 更新时间:2023-11-30 19:18:38 24 4
gpt4 key购买 nike

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

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);
}

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

最佳答案

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

deque2array中:

arr = aux->elem

您可能想要:

*arr = aux->elem

否则,该函数将返回存储在最后一个 aux->elem + 1 中的值。如果它应该返回一个 void ,则很难理解它将如何运行而不会出现异常。 *.

在您的测试器中:

pointer = pointer + i

您正在循环的每次迭代中修改指针。因此,循环第 N 次迭代时的 pointerpointer 的原始值加上整数 0 到 N 的总和,而不是pointeri ,因为它看起来是有意的。同样,如果这段代码运行没有异常,那就是一个奇迹,因为它将读取超出数组范围的内存。给定一个足够大的 numberOfElements(queue) 返回值,这肯定会产生错误。

一旦你解决了这些问题,如果我假设 aux->elem 就是我所认为的那样,并且 insertInDeque 做了我认为它所做的事情,你的新问题是您将 xyz 的地址插入到结构中,而不是值,因此它会使得让您更正的测试代码打印变量的地址。到目前为止,由于您正在读取未定义的内存位置,因此无论数据结构中实际是什么,结果都没有意义。

关于c - 函数 deque 到数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com