【发布时间】:2016-11-16 02:31:09
【问题描述】:
我尝试计数排序并遵守“http://www.tutorialspoint.com/compile_c_online.php”并且它运行完美但是当我尝试在“http://codepad.org”中编译时,它说分段错误。我尝试使用gdb但它没有显示任何错误。 这是代码,任何人都可以找到导致它的行。
#include<stdio.h>
int main(void)
{
long long int t;
int i=0,j,max,min,temp,pos;
scanf("%lld",&t);//enter total numbers to be sorted
long long int a[t];
while(i<t)
{
scanf("%lld",&a[i]);
if(i==0) max=min=a[i];
else
{
if(a[i]>=max) max=a[i];
if(a[i]<min) min=a[i];
}
++i;
}
temp=(max-min+1);
long long int b[temp];
for(i=0;i<t;i++)
for(j=min;j<=max;j++)
{
if(i==0) b[j-min]=0;
if(a[i]==j) ++b[j-min];
}
for(i=0;i<temp;i++) if(i!=0) b[i]=b[i]+b[i-1];
long long int c[t];
for(i=0;i<t;i++)
{
for(j=0;j<temp;j++)
{
if(a[i]==(j+min))
{
pos=(b[j]-1);
c[pos]=j+min;
--b[j];
}
}
}
for(j=0;j<t;j++) printf("%lld\n",c[j]);
return(0);
}
【问题讨论】:
-
这意味着程序有未定义的行为。:)
-
我是初学者,你能告诉我是哪一行导致的吗???
-
在Linux环境下使用gcc编译代码,然后在valgrind下运行。如果你正在读/写你不应该读的内存,它会告诉你。
-
为了便于阅读和理解:1) 请一致地缩进您的代码。切勿使用制表符进行缩进。建议为每个缩进级别设置 4 个空格,因为它足够宽,即使使用可变宽度字体也可以看到。在每个左大括号 '{'' 后缩进。在每个右大括号 '}' 之前取消缩进。 2) 通过空行分隔代码块(for、if、else、while、do...while、switch、case、default)。 3) 使用有意义的变量名。变量名应指明
contents或usage(或更好,两者都写) -
请遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。