C 动态内存分配、重新分配和计算每次输入后的总和

C 动态内存分配、重新分配和计算每次输入后的总和,c,C,我有点被这个练习卡住了好几个小时 如您所见,获取一个数字,动态分配一个内存,如果该数字为负数,则减小其大小,并在每次输入后计算总和 我的代码是这样的: #include <stdio.h> #include <stdlib.h> void main() { int number; int count = 1; int sum = 0; int *ap; printf("Input Value = "); scanf_s(

我有点被这个练习卡住了好几个小时

如您所见,获取一个数字,动态分配一个内存,如果该数字为负数,则减小其大小,并在每次输入后计算总和

我的代码是这样的:

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int number;
    int count = 1;
    int sum = 0;
    int *ap;
    printf("Input Value = ");
    scanf_s("%d", &number);
    ap = (int*)malloc(sizeof(int)*count);
    *ap = number;
    sum += *ap;
    printf("sum = %d\n", sum); /*getting the first value*/

    for( ; ;)
    {
        printf("Input Value = ");
        scanf_s("%d", &number);
        if (number < 0)
        {
            count--; /*reducing the size*/
            ap = (int*)realloc(ap, sizeof(int)*count); 
            for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++)
            {
                sum+=*ap;
            }
            printf("sum = %d\n", sum);
        }
        else
        {
            count++; /*increasing the size*/
            ap = (int*)realloc(ap, sizeof(int)*count);
            *(ap+(count-1)) = number;
            for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++)
            {
                sum+=*ap;
            }
            printf("sum = %d\n", sum);
        }
    }
    free(ap);
}
#包括
#包括
void main()
{
整数;
整数计数=1;
整数和=0;
int*ap;
printf(“输入值=”);
扫描单位(“%d”和编号);
ap=(int*)malloc(sizeof(int)*计数);
*ap=数量;
总和+=*ap;
printf(“sum=%d\n”,sum);/*获取第一个值*/
对于(;;)
{
printf(“输入值=”);
扫描单位(“%d”和编号);
如果(数字<0)
{
计数--;/*减小大小*/
ap=(int*)realloc(ap,sizeof(int)*计数);

对于(int i=0;i而言,代码的主要问题在于-

for(int i=0; i<sizeof(ap)/sizeof(ap[0]); i++)

用于(int i=0;iPerhaps调试器可能会指出您的错误。您应该将问题缩小到程序中需要帮助的特定部分,以便其他人可以从中受益。
ap
是一个指针,显然是计算机上的4个字节。更改其目标内容对指针大小没有影响。
sizeof(ap)
这不起作用。
ap
是一个poiner而不是数组。
sizeof
将始终返回一个常量值。