为什么这个问题不重复? 问题不能在scanf
,因为它是由hackerrank给出的,我无法修改代码! 此外,由hackerrank提供的测试用例是自动化的。 我们可以通过输入阅读来信任他们。 我的逻辑中有一些错误在数组中找到两个元素,但是找不到它:|
注意:我不能修改main
方法,如前所述。 重新迭代它。 为什么我不能修改? 这是因为该方法是由门户网站给出的。 我无法改变它。 它读取输入并通过一些自动脚本调用我的方法,我无法控制它。 所以,请不要告诉我修改main
方法。
我正在用C
语言尝试hackerrank中的一些练习问题,并且一些测试用例开始为下面的问题抛出Segmentation fault
。 我已经尝试了解它超过2个小时了,并且想不出任何会导致segmentation fault
测试用例。 我卡住了:|
问题陈述:
给定一个数组和一个数字。 查找数组中是否有2个元素,其总和等于给定数字。 如果存在数字则返回1,否则返回0。
很简单,对吧? 我的想法是一样的,编码如下,
int compFunc (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int isSumPossible(int a[], int L, int N ){ /*L: Length of the array */ if(a==NULL) return 0; if(L<=1) return 0; int left=0, right=L-1; qsort(a,L,sizeof(int),compFunc); while(left<right) { if(a[left]+a[right]==N) return 1; else if(a[left]+a[right]<N) left++; else right--; } return 0; } int main() //given by hackerrank, I can't modify main method { int N; scanf("%d", &N); //fixed &N - it was correctly given in code, I missed it while typing it here. int a[100004], i=0; //read input into array a, based on N int x;scanf("%d", &x); //fixed &x - it was correctly given in code, I missed it while typing it here. printf("%d", isSumPossible(a,N,x)); }
请假设包含所有必需的头文件。 现在,当我运行代码时,大多数测试用例都通过了,对于某些测试用例,它们显示了Segmentation fault
。 不幸的是,我看不到测试用例:|。 我已经完成了我的代码超过10次并且我不明白在哪种情况下我会得到Segmentaion fault
。 任何人都可以帮助我了解我的代码中缺少哪种情况,为什么我会看到分段错误?
问题出在代码主要部分的scanfs中。
如果你看一下文档,function描述甚至会说:
从stdin读取数据并根据参数格式将它们存储到附加参数指向的位置 。
这意味着你必须给它一个内存地址来写入数据。 通过在主体中添加&
和两个整数变量,问题就解决了。
int main() { int N; scanf("%d", &N); int a[100004], i=0; //read input into array a, based on N int x;scanf("%d", &x); printf("%d", isSumPossible(a,N,x)); }
以上就是c/c++开发分享为什么我在C中出现分段错误?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522843.html