You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:06:03