这是一个程序,用于查找数组中最大数字的最大出现次数。 如何解决此中的分段错误错误? hackerrank问题
/* given:
1<n<10^5
1<arrayNum[n] <10^7 */
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main(){
signed long int max,n,d,a,arrayNum[n];
signed long int max_count; scanf("%ld",&n);
for( a=0; a < n; a++)
{
scanf("%ld",&arrayNum[a]);
}
max = arrayNum[0];
max_count = 1;
for (int a = 0; a < n; ++a)
{
if (arrayNum[a] == max)
max_count++;
else if (arrayNum[a] > max)
{
max_count = 1;
max = arrayNum[a];
}
}d=max_count;
printf("%ld",d);
return 0;}
答案 0 :(得分:2)
int main(){
signed long int max,n,d,a,arrayNum[n]; //<< the problem is here,
// the content of n is indeterminate
// at that state
signed long int max_count; scanf("%ld",&n);
...
在用户输入arrayNum[n]
的值之前, n
被声明为。
只需将代码更改为:
int main(){
signed long int max,n,d,a;
signed long int max_count;
scanf("%ld",&n);
signed long arrayNum[n];
...
但可能还有其他问题。
正如其他人已经说过的那样:修复代码缩进。正确地嵌入/格式化代码是必不可少的,因此您的代码可以被其他人理解(甚至更重要的是您自己)。
答案 1 :(得分:0)
要解决分段错误,最好的方法是:
-g
或-g3
)进行编译,并使用调试器(例如 gdb )查找分段错误的位置。答案 2 :(得分:0)
首先,您应该检查代码缩进,让我们更清楚地阅读。
然后,向我们提供有关您的段错误的更多信息:它在哪里发生?您可以使用Valgrind(在Linux上)等工具来查找此类信息。您只需使用调试标志(GCC上的-g)构建程序并使用GCC运行程序。
这里的问题是arrayNum[n]
,其大小为非初始化变量(n)。所以这个数组没有任何分配的空间。通过arrayNum
访问scanf()
会产生此段错误。