LeetCode第1题two_sum C语言提交报错与运行结果异常排查
LeetCode两数之和C代码报错&运行异常问题定位
提交时25行main类型冲突报错原因
LeetCode的C语言判题环境会自动预置标准int main(int argc, char *argv[])入口函数,负责读取测试用例、调用用户实现的功能函数、校验输出结果,提交代码时不需要用户自行编写main函数。
你自己编写的代码仅22行,报错指向的25行main是平台自动追加的内置入口,因为你在提交代码里自定义了void main(),和平台内置main的函数类型、参数列表不匹配,因此触发类型冲突报错。
本地运行无输出、结果错误的代码问题
你写的控制台版本代码存在多处语法和逻辑错误:
- 变量名大小写错误:读入数组的语句
scanf("%d", &a[I]);中使用了大写I,和之前定义的循环变量小写i不是同一变量,读入的数值不会存入目标数组,触发未定义行为 - 循环递增逻辑错误:两层遍历的for循环中,递增条件错写为
n++,没有对循环变量i、j做递增,会导致死循环、数组越界,根本无法执行到结果打印逻辑,这是本地无输出的核心原因 - main函数写法不符合C标准:标准C规定main函数返回值为
int类型,void main()属于非标准写法,仅部分本地编译器做了兼容,无法在严格编译环境下运行 - 数组长度固定为10:固定长度的数组无法适配长度超过10的输入场景,会触发数组越界
- 交互逻辑不符合OJ提交要求:你写的
printf提示、scanf读入是本地控制台程序的交互逻辑,LeetCode平台不会通过标准输入传参给你写的main函数,而是直接传参调用题目指定的接口函数,这类交互代码在提交时必须全部删除。
LeetCode平台可正常提交的两数之和暴力解法参考
/** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* nums, int numsSize, int target, int* returnSize){ *returnSize = 2; int* result = (int*)malloc(sizeof(int) * 2); for (int i = 0; i < numsSize; i++) { for (int j = i + 1; j < numsSize; j++) { if (nums[i] + nums[j] == target) { result[0] = i; result[1] = j; return result; } } } return result; }
本地调试时可以自行在代码外补充main函数做输入输出测试,提交前删除自定义的main和相关控制台交互代码即可。
内容的提问来源于stack exchange,提问作者B M PAVAN
相关产品推荐
相关产品推荐

