作为家庭作业,我必须实现一个接收两个指针向量的函数。它应该比较这些指针所指向的内存地址中包含的值,如果它们全部相同则返回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]
我在这里问同一个问题,因为我认为这两个问题都是相关的。
编辑:
MAX_DELIVERIES在名为data.h的文件中的定义
#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");
}
答案 0 :(得分:0)
感谢大家的回答。我修好了,但现在我更加困惑。
我刚刚删除了两个system("PAUSE");
之间的printf
,现在两者打印完全相同。对不起,我没有在我的代码中发布,但我认为这完全无关紧要。
现在我的下一个问题是:世界上system("PAUSE")
做什么会弄乱记忆?
答案 1 :(得分:0)
我认为问题是由比较if(* v1 [i]!= * v2 [i])引起的。必须是
v1[i] != v2[i] or *(v1+i) != *(v2+i)