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

C语言结构体中double pointer访问问题:代码运行无输出错误求助

代码问题排查

你这段代码运行无输出的核心原因是野指针访问触发程序崩溃,具体问题点如下:

  • 二级指针内存分配逻辑错误
    C语言的二级指针模拟二维数组时,需要分两步分配内存:
    1. 先给第一维分配对应行数的int*指针内存,每个指针指向一行的首地址
    2. 再给每一行的指针分配对应列数的int类型内存,用于存储实际数值
      你当前只完成了第一步的分配,且第一步分配时错误乘了列数,没有给第二维分配内存就直接赋值,属于非法访问内存,程序会直接崩溃退出,自然没有输出。
  • main函数写法不符合C标准
    标准C规定main函数返回值为int类型,void main()是老旧的非标准写法,部分编译器会出现编译或运行异常。
  • 内存释放不完全
    二级指针的内存释放需要先逐行释放第二维内存,再释放第一维的指针数组,你只释放了第一维内存,会造成内存泄漏。

修正后的可运行代码

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct Matriks{
    int jumlahBaris;
    int jumlahKolom;
    int** nilai;
} Matriks, *Matriks2;

int main(){
    int i;
    Matriks A;
    A.jumlahBaris = 2;
    A.jumlahKolom = 3;
    // 第一步:分配第一维行指针内存,大小为行数 * int*字节数
    A.nilai = (int **)malloc(A.jumlahBaris * sizeof(int*));
    // 第二步:逐行分配第二维存储int的内存,大小为列数 * int字节数
    for(i = 0; i < A.jumlahBaris; i++){
        A.nilai[i] = (int*)malloc(A.jumlahKolom * sizeof(int));
    }

    int x = 26;
    int y = 12;
    A.nilai[0][0] = x;
    A.nilai[0][2] = y;
    printf("%d\n", A.nilai[0][0]);
    printf("%d", A.nilai[0][2]);

    // 释放内存:先逐行释放第二维
    for(i = 0; i < A.jumlahBaris; i++){
        free(A.nilai[i]);
    }
    // 再释放第一维指针数组
    free(A.nilai);
    return 0;
}

内容的提问来源于stack exchange,提问作者MWA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:04