C语言指针数组赋值后控制台无打印输出问题求助
C代码问题诊断
你提交的原代码如下:
#include <stdio.h> #include <stdlib.h> void main() { int i; int *as[2]; for(i=0;i<2;i++) { *as[i]=i; printf("%d\n",*as[i]); } }
代码存在3个核心问题:
- 野指针访问(无输出的核心原因):你定义的
int *as[2]是长度为2的int指针数组,数组内的两个指针没有初始化,指向随机非法内存地址。直接执行*as[i] = i相当于向随机内存写入数据,触发未定义行为,程序大概率直接崩溃退出,因此不会产生任何打印输出。 - 预期输出逻辑错误:for循环的遍历条件是
i<2,i的取值只有0和1,就算程序正常运行也只会输出0和1,不可能输出你预期的1和2。 - main函数写法不符合C标准:标准C规定main函数的返回值必须是int,
void main是非标准写法,仅部分老旧编译器支持,正确写法应为int main(),执行结束后返回0表示正常退出。
修正后的可运行代码示例
#include <stdio.h> #include <stdlib.h> int main() { int i; int *as[2]; for(i=0;i<2;i++) { // 为每个指针分配合法的int类型内存空间 as[i] = (int*)malloc(sizeof(int)); // 如果要输出1和2,将下方的i改为i+1即可 *as[i] = i; printf("%d\n",*as[i]); // 释放堆内存避免泄漏 free(as[i]); } return 0; }
上述代码运行后输出:
0 1
内容的提问来源于stack exchange,提问作者Kishore Kumar S
相关产品推荐
相关产品推荐

