指针向量中值的神秘变化

时间:2016-05-26 11:19:55

标签: c pointers

作为家庭作业,我必须实现一个接收两个指针向量的函数。它应该比较这些指针所指向的内存地址中包含的值,如果它们全部相同则返回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");
    }

2 个答案:

答案 0 :(得分:0)

感谢大家的回答。我修好了,但现在我更加困惑。

我刚刚删除了两个system("PAUSE");之间的printf,现在两者打印完全相同。对不起,我没有在我的代码中发布,但我认为这完全无关紧要。

现在我的下一个问题是:世界上system("PAUSE")做什么会弄乱记忆?

答案 1 :(得分:0)

我认为问题是由比较if(* v1 [i]!= * v2 [i])引起的。必须是

v1[i] != v2[i] or *(v1+i) != *(v2+i)