gpt4 book ai didi

c - 指针 vector 中值的神秘变化

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

作为家庭作业,我必须实现一个接收两个指针 vector 的函数。它应该比较这些指针所指向的内存地址中包含的值,如果它们相同或不同,则返回 TRUE 或 FALSE。

为此我创建了这个函数:

tBoolean comparePointerVector(int *v1[], int *v2[]) {       
int i;
tBoolean status = TRUE;

for (i=0;i<MAX_DELIVERIES;i++) {
if(*v1[i]!=*v2[i]) {
status = FALSE;
break;
}
}
return status;
}

该方法编译良好,但总是在第一次迭代中崩溃。调查这个问题我发现了一个很奇怪的现象。在进入for循环之前添加下一段代码,两行的打印结果是不同的,这让我很惊讶:

printf("value %d\n   ",*v1[0]);
printf("value %d\n ",*v1[0]);

第一行正确打印v1[0]指向的值,但第二行打印内存地址。他们打印的内容怎么可能不一样?

除此之外,为什么这段代码似乎破坏了我的程序?

*v1[i]!=*v2[i]

我在这里问同一个问题,因为我认为这两个问题是相关的。

编辑:

名为 data.h 的文件中 MAX_DELIVERIES 的定义

#define MAX_DELIVERIES 50

调用函数:

tBoolean pd_equals(tProductDeliveries pd1, tProductDeliveries pd2){

//For maintenability and better understading this method contains several 'return' statements.
if(pd1.poductID!=pd2.poductID) {

return FALSE;

} else if(pd1.totalPurchases!=pd2.totalPurchases) {

return FALSE;

} else if(pd1.totalSales!=pd2.totalSales) {

return FALSE;

} else if(pd1.total!=pd2.total) {

return FALSE;

} else if(comparePointerVector(pd1.sales, pd2.sales) != TRUE) {

return FALSE;

} else if(comparePointerVector(pd1.purchases, pd2.purchases) != TRUE) {

return FALSE;
}

return TRUE;
}

调用 pd_equals 方法:

    pd_getProductDeliveries(deliveries, 123, &pd1); 
if(pd_equals(pd1, pd1)==TRUE) {
printf("\n\t-> OK\n");
passedTest[0]++;
} else {
printf("\n\t-> FAIL.\n");
}

最佳答案

谢谢大家的回答。我已经解决了,但现在我更困惑了。

我刚刚删除了两个 printf 之间的 system("PAUSE"); ,现在两者的打印效果完全相同。很抱歉我没有将其发布到我的代码中,但我认为它完全不相关。

现在我的下一个问题是:system("PAUSE")到底是什么搞乱了内存?

关于c - 指针 vector 中值的神秘变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459381/

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