与malloc相关的逻辑错误

与malloc相关的逻辑错误,c,malloc,C,Malloc,这是我写的一段代码。我有一些逻辑错误 typedef struct bigint_ { int signbit; int*ptr; } bigint; void print_bigint(bigint big_num); bigint shift_by_power_of_10(bigint big_num, int d); main() { bigint a; bigint b; a.ptr=malloc(6*sizeof(int)); a.ptr[0] = 1; a.ptr[1] = 2

这是我写的一段代码。我有一些逻辑错误

typedef struct bigint_ {

int signbit;
int*ptr;

} bigint;
void print_bigint(bigint big_num);
bigint shift_by_power_of_10(bigint big_num, int d);

main()
{
bigint a;
bigint b;
a.ptr=malloc(6*sizeof(int));
a.ptr[0] = 1;
a.ptr[1] = 2;
a.ptr[2] = 2;
a.ptr[3] = 2;
a.signbit = 0;
b=shift_by_power_of_10(a,3);
print_bigint(b);

}
bigint shift_by_power_of_10(bigint big_num, int d)
{
int len = (int)(sizeof(big_num.ptr)/sizeof(int));
printf("%d\n",len);
big_num.ptr = realloc(big_num.ptr,d*sizeof(int));
int i;
for (i=len;i<len+d;i++)
{
    big_num.ptr[i] = 0;
}
return(big_num);

}
void print_bigint(bigint big_num)
{
int i;
if (big_num.signbit == 1)
{
    printf("-");
}
int len = (int)(sizeof(big_num.ptr)/sizeof(int));
for (i=0;i<len;i++)
{
    if (i!=len-1)
    {
        printf("%d",big_num.ptr[i]);
    }
     else
    {
            printf("%d\n",big_num.ptr[i]);
    }
}   
}
typedef struct bigint\u{
int符号位;
int*ptr;
}比基特;
无效打印(bigint big num);
按10的幂移位(bigint big num,int d);
main()
{
bigint a;
比金特b;
a、 ptr=malloc(6*sizeof(int));
a、 ptr[0]=1;
a、 ptr[1]=2;
a、 ptr[2]=2;
a、 ptr[3]=2;
a、 符号位=0;
b=通过_10(a,3)的_幂_移位_;
印刷字体(b);
}
按10的幂移位(bigint big num,int d)
{
int len=(int)(sizeof(big_num.ptr)/sizeof(int));
printf(“%d\n”,len);
big_num.ptr=realloc(big_num.ptr,d*sizeof(int));
int i;
for(i=len;isizeof(big_num.ptr)在x86上等于4(在x64上为8),因为它是指针的大小。sizeof(int)等于4(VS2010),这就是为什么(在x86上运行)我会得到4/4=1的原因:


如果您在x64上运行它,那么您可以得到8/4=2

@askmish:这不是正常工作的代码,因此不符合主题。没有代码审阅帐户的人喜欢建议在那里发布调试问题。:(当应用于指针时,对
sizeof
运算符的典型误解,可能有数百个重复。
int len = (int)(sizeof(big_num.ptr)/sizeof(int));