我需要编写一个函数,以相同的幂求和,
规范由以下结构定义:

typedef struct monom {
    int coefficient;
    int power;
}MONOM;


我从这份工作中写的函数是:

int sumMonomsWithSamePower(MONOM** polynomial, int size)
{
        int i, powerIndex = 0;

        for (i = 0; i < size; i++)
        {
            if ((polynomial[powerIndex])->power == (polynomial[i])->power)
                {
                        if (powerIndex != i)
                                (polynomial[powerIndex])->coefficient += (polynomial[i])->coefficient;

                }

                else
                        powerIndex++;
        }

        powerIndex++;
        *polynomial = (MONOM*)realloc(polynomial, powerIndex);
        return powerIndex;
}


通过以下调用进行调用:

*polySize = sumMonomsWithSamePower(&polynomial, logSize);


多项式数组作为MONOM的排序数组(按幂升序排列)发送到函数。

我的问题是,在sumMonomsWithSamePower()的第7行,函数崩溃,因为它无法通过以下方式查看数组中的元素。当我将数组的元素放在调试器的Watch list中时,我也看不到使用polynomial [i],但是如果我使用(polynomial [0] + i),则可以清楚地看到它们。

这里发生了什么?

最佳答案

我假设在sumMonomsWithSamePower()之外,您已经为polynomial分配了polynomial = malloc( size * sizeof(MONOM) );之类的东西(其他所有内容都不符合您的realloc())。因此,您具有一个MONOM数组,并且多项式[1]的存储位置为polynomial[0] + sizeof(MONOM)字节。

但是,现在来看一下polynomial中的sumMonomsWithSamePower()在下面的段落中,我将使用ppoly重命名它(多项式的指针),以避免将其与原始数组混淆:这是一个MONOM **,因此ppoly[1]地址存储位置sizeof(MONOM *)中的ppoly[0] + sizeof(MONOM *)字节,并将其解释为指向MONOM结构的指针。但是您有一个结构数组,而不是一个指针数组。用(*ppoly)[i].power替换您的表达式(当然还有其他所有表达式),该部分将起作用。顺便说一下,这正是您提到的两个调试器语句的区别。

此外,请看一下我对powerIndex使用的评论

关于c - 指向结构元素的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17748776/

10-09 15:19