c - 编译代码块时出错

标签 c

编译此代码时,我在代码块中遇到 255 错误...它给我 filename.exe 停止工作...但我在 ubuntu 中获得输出

我的代码...

#include<stdio.h>
int main()
{
  int t;
  scanf("%d",&t);
  while(t--)
  {
  long long int n,k=0;
  scanf("%lld",&n);
  long long int a[n],b[1000000]={0};
  int i;
  for(i=0;i<n;i++)
    {
      scanf("%lld",&a[i]);
      b[a[i]]++;
    }
  long long int count=0;
  for(i=1;i<=1000000;i++)
    { 

       if(b[i]>0)
       count+=(b[i]*(b[i]+1))/2;
    }
  printf("%lld\n",count);
  }
  return 0;
}

我/p 2 4 1 2 3 4 3 1 2 1 输出/输出 4 4

最佳答案

您已定义

long long int b[1000000]={0};

但你继续

for(i=1;i<=1000000;i++)
  { 
    if(b[i]>0)
    count+=(b[i]*(b[i]+1))/2;
  }

这将超出 b[] 的范围。在 C 中,数组的索引范围是从 b[0]b[length-1]

编辑

此外,您至少在堆栈上放入了 8000000 字节,这可能会破坏堆栈。

关于c - 编译代码块时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232293/

相关文章:

c - 为什么我的 C 字符串堆栈有 valgrind-3.1.1 报告的无效写入

C 子进程运行其代码两次

c - GNU 链接和编译

在C中将十进制数转换为二进制数

c - 带值变量的定义和声明

c - 在 C 中,为什么 sizeof(char) 为 1,而 'a' 是一个 int?

自定义 Eclipse 代码辅助

c - 当作为函数指针传递时,二维数组会充满垃圾

c - 串行代码比在 C 中只使用一个线程慢得多?

c - c 结构在其成员之间有作用域吗?