无法理解代码为何抛出异常,请求分析C语言代码问题
你的C语言代码异常问题分析与修复方案
Hey,我仔细排查了你代码里的问题,这几个bug是导致程序抛出异常的核心原因,咱们一个个来看:
一、Main函数里的两个致命问题
1. scanf语句漏写取地址符&
你代码第32行的
scanf("%d,size")完全写错了——scanf要想把用户输入的数值存到变量里,必须传入变量的内存地址,正确写法应该是scanf("%d", &size)。漏写&会让程序把一个随机的内存地址传给scanf,直接触发内存访问异常,或者导致变量值乱掉。
2. 未清理输入缓冲区的换行符
执行完scanf后,用户输入完回车的换行符会留在输入缓冲区里,如果后续还有读取字符串(比如用
gets或者scanf("%s"))的操作,程序会直接把这个换行符当成输入内容,导致逻辑异常。所以必须在scanf之后加一句getchar();来清除这个残留的换行符。
二、createArr函数的malloc参数错误
你第48行的malloc调用犯了一个新手常见的错误:malloc的参数要求是总字节数,而不是数组的元素个数。对于int类型的数组,每个元素占
sizeof(int)字节(通常是4字节),所以正确的写法应该是malloc(len * sizeof(int))。如果只传len,相当于只分配了len个字节的空间,远不够存len个int元素,后续访问数组的时候必然会越界,触发内存异常。
修复后的完整代码示例
#include <stdlib.h> #include <string.h> #include <stdio.h> // 动态创建int数组的函数声明 int* createArr(int len); int main() { int size; printf("请输入数组长度:"); // 修复:添加取地址符&,正确读取输入 scanf("%d", &size); // 修复:清除输入缓冲区的换行符 getchar(); int* arr = createArr(size); // 额外建议:检查malloc是否成功 if (arr == NULL) { printf("内存分配失败,程序退出!\n"); return 1; } // 这里可以添加数组的使用逻辑,比如赋值、打印等 // 额外建议:记得释放动态分配的内存,避免内存泄漏 free(arr); return 0; } int* createArr(int len) { // 先判断长度是否合法 if (len <= 0) { return NULL; } // 修复:计算正确的内存字节数 int* arr = (int*)malloc(len * sizeof(int)); // 可选:初始化数组元素为0 if (arr != NULL) { memset(arr, 0, len * sizeof(int)); } return arr; }
额外小建议
- 给main函数和其他函数加注释,说明功能和参数含义,方便自己后续维护或者别人阅读
- 永远记得检查malloc的返回值,内存分配失败是很常见的情况,必须做错误处理
- 使用完动态分配的内存后一定要调用
free,不然会造成内存泄漏
内容的提问来源于stack exchange,提问作者SaKaMoToSaN15
相关产品推荐
相关产品推荐

