C 指向结构元素的指针

C 指向结构元素的指针,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,我需要写一个函数,用相同的幂和单项式, 单体由以下结构定义: typedef struct monom { int coefficient; int power; }MONOM; 我在工作中写的功能是: int sumMonomsWithSamePower(MONOM** polynomial, int size) { int i, powerIndex = 0; for (i = 0; i < size; i++) {

我需要写一个函数,用相同的幂和单项式, 单体由以下结构定义:

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;
}
多项式数组作为单项式的排序数组(按幂升序排序)发送给函数

我的问题是,在
的第7行
callomswithsamepower()
函数崩溃,因为它无法通过以下方式查看数组中的元素。当我在调试器中将数组元素放入
监视列表中时,我也无法使用多项式[I]看到它们,但如果使用(多项式[0]+I),我可以清楚地看到它们


这里发生了什么事?

我假设在
之外
使用samepower()调用
多项式
分配了类似
多项式=malloc(size*sizeof(MONOM))(其他一切都与您的
realloc()
不一致)。所以你有一个单体数组,多项式[1]的内存位置是
多项式[0]
+
sizeof(单体)
字节

但是现在看一下
多项式
callomswithsamepower()
内存位置的字节
ppoly[0]+sizeof(MONOM*)
并将它们解释为指向MONOM结构的指针。但是您有一个结构数组,而不是指针数组。用
(*ppoly)[i]替换你的表达式。power
(当然还有其他所有相应的表达式),这部分就可以工作了。顺便说一下,这就是您提到的两个调试器语句的区别


此外,请看我关于使用
powerIndex

的评论,您仍然不需要双指针,也不应该强制转换
realloc()
@H2CO3的返回值,我还不知道,函数甚至没有得到
realloc()
@H2CO3,我认为您的强制转换是错误的,因为
realloc()
是一个
void*
函数,我需要显式施法。@Quaker我不这么认为。每次你找到一个不同的幂,那么你就应该把
powerIndex
设置为新的单体的索引,而不仅仅是++。或者,当你发现一个单子与之前的单子具有相同的功率时,你必须立即缩小你的数组。
*polySize = sumMonomsWithSamePower(&polynomial, logSize);