Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以这样使用malloc吗?_C_Sum_Malloc_Min - Fatal编程技术网

我可以这样使用malloc吗?

我可以这样使用malloc吗?,c,sum,malloc,min,C,Sum,Malloc,Min,我想从动态整数表中找到最小的数字和摘要。我不知道为什么没有显示结果。我在malloc上做错什么了吗?我也可以用realloc吗 #include <stdlib.h> #include <stdio.h> int main() { int n,i,min,sum,xronos; int* array; printf("Give me how many numbers does the table will have: \n"); scan

我想从动态整数表中找到最小的数字和摘要。我不知道为什么没有显示结果。我在malloc上做错什么了吗?我也可以用realloc吗

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

int main()
{
    int n,i,min,sum,xronos;
    int* array;
    printf("Give me how many numbers does the table will have: \n");
    scanf("%d",&n);
    array=(int*)malloc(n*sizeof(int));

    for(i=1;i<=n;i++)
    {
        printf("Give the number %d",i);
        printf("\n");
        scanf("%d",&array[i]);
    }

    for(i=1;i<=n;i++)
    {
        sum=sum+array[i];
        if (i=1)
        {
            min=array[i];
        }
        else
        {
            if (array[i]<min)
            {
                min=array[i];
            }
        }
    }

    printf("%d",sum);
    printf("\n The answer is :",(n-2)*min+(sum-min));
    getch();
    return 0;
}
#包括
#包括
int main()
{
int n,i,min,sum,xronos;
int*数组;
printf(“告诉我该表有多少个数字:\n”);
scanf(“%d”和“&n”);
数组=(int*)malloc(n*sizeof(int));

对于(i=1;i是的,这几乎就是您应该如何使用
malloc
,除了三件小事和一件大事之外:

  • 不要将
    malloc
    结果转换为C
  • 使用从0到n-1(包括)的索引(代码从1到n,包括)
  • 添加调用
    空闲(数组)
    以避免内存泄漏
重要的是,您不需要
malloc
来解决这个问题:您可以一边计算
sum
min
,而无需将单个项保存到数组中

如果循环中有
s,则可以使用此检查替换链

if (i == 0 || array[i] < min) {
    min=array[i];
}
作为

使用复合赋值运算符。不要忘记将总和初始化为零!

第22行,需要

if (i=1) 
着手

if (i==1)
现在你把i设为1

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>  /* Defines: ENOMEM */

int main()
   {
已删除xronos,因为它未被使用

   int n,i,min;
初始化总和为0

   int sum=0;
将数组指针初始化为NULL,以便更容易清理。 int*array=NULL

   printf("Give me how many numbers does the table will have: \n");
   scanf("%d",&n);
将malloc的输出转换为(int*)本身并没有什么错误。在某些情况下,这是一种很好的编码实践。(干得好)

您应该始终测试您是否确实从malloc获得了内存

   if(NULL == array)
      {
      rCode=ENOMEM;
      fprintf(stderr, "malloc() failed.");
      goto CLEANUP;
      }
数组元素索引在0到(n-1)的范围内。从零开始索引,并确保在(n-1)停止


也许是因为(i=1;它有两件事:第一。第二,索引开始于零,结束于大小减1。另外,您应该将“sum”初始化为零?注意:检查
scanf()的返回值
。你是对的,我没有看到,我纠正了它,但问题仍然存在。我能够用某些数字得到正确的和,但不是给定的最低数字。因此,希望这不是代码问题,只是逻辑问题。将
min
初始化为
INT\u MAX
这样的值具有
min
有定义的优点
printf()处的ed值
时间应该
n@chux问题是当
n
为零或更小时,
min
实际上是未定义的。当输入负值或零
n
时,需要提前进行检查。谢谢您的回答!!!但是我如何不使用malloc从用户那里获得表的大小呢?@user3403697与您现在使用的方法相同-
scanf(“%d”,&n);
您需要做的更改是将您拥有的两个循环组合在一个循环中,并替换
array[i]
使用一个临时
int
变量,您可以在循环的同一次迭代中读取、使用和丢弃该变量。谢谢!您非常善于分析!我从您的帖子中学到了很多东西,但我认为问题没有解决。
   int sum=0;
   printf("Give me how many numbers does the table will have: \n");
   scanf("%d",&n);
   array=(int*)malloc(n*sizeof(int));
   if(NULL == array)
      {
      rCode=ENOMEM;
      fprintf(stderr, "malloc() failed.");
      goto CLEANUP;
      }
   for(i=0;i<n;i++)
      {
      printf("Give the number %d",i);
      printf("\n");
      scanf("%d",&array[i]);
      }
   for(i=0;i<n;i++)
      {
      sum=sum+array[i];

      if(1 == i)
         min=array[i];
      else
         {
         if(array[i] < min)
            min=array[i];
         }
      }

   printf("%d",sum);
   printf("\n The answer is :",(n-2)*min+(sum-min));
   getch();

CLEANUP:
   if(array)
       free(array);

   return(rCode);
   }