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

使用二级指针分配杨辉三角内存时出现0xC00000FD错误求助

杨辉三角二级指针内存分配错误(错误码0xC00000FD)修复方案

核心错误分析

错误码0xC00000FD对应内存访问越界或栈溢出,你的代码存在两个致命问题:

  1. 内存分配逻辑完全混乱
    • somma函数逻辑错误:循环中修改了循环变量x,导致循环无法正常终止(比如输入x=3,循环里x会不断变化为3→3→2→0→-3...永远满足i<=x),直接触发栈溢出。
    • 二级指针分配方式错误:int**类型的mat应该先分配n个指向每行的指针,再为每个指针分配对应行的元素空间(第i行需要i+1个int),而不是用错误计算出的sum去分配int*的数量。
  2. 野指针直接访问
    stampa函数中直接对*(a+i)+j赋值,但a[i]是未初始化的野指针,访问它会触发内存访问错误。

修复后的完整代码

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

// 计算杨辉三角总元素数:n*(n+1)/2
int get_total_elements(int n) {
    return n * (n + 1) / 2;
}

void print_pascal(int **a, int n) {
    // 初始化第一行
    a[0][0] = 1;
    // 填充后续行
    for (int i = 1; i < n; i++) {
        a[i][0] = 1;
        // 每行只需要填充到第i个元素(第i行共i+1个元素)
        for (int j = 1; j < i; j++) {
            a[i][j] = a[i-1][j-1] + a[i-1][j];
        }
        a[i][i] = 1;
    }
    // 打印杨辉三角
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++ ) {
            printf(" %3d", a[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int n, **mat = NULL;
    printf("输入行数n: ");
    scanf("%d", &n);

    // 第一步:分配n个int*指针,对应n行
    mat = (int**)malloc(n * sizeof(int*));
    if (mat == NULL) {
        perror("分配行指针失败");
        return 1;
    }

    // 第二步:给每行分配对应数量的int空间
    for (int i = 0; i < n; i++) {
        mat[i] = (int*)malloc((i + 1) * sizeof(int));
        if (mat[i] == NULL) {
            perror("分配行元素失败");
            // 回滚已分配内存,避免泄漏
            for (int j = 0; j < i; j++) {
                free(mat[j]);
            }
            free(mat);
            return 1;
        }
    }

    print_pascal(mat, n);

    // 释放内存:先释放每行,再释放行指针数组
    for (int i = 0; i < n; i++) {
        free(mat[i]);
    }
    free(mat);

    return 0;
}

关键修复点说明

  • 修正内存分配流程:二级指针mat先存储n个行指针,再为每个行指针分配对应长度的内存,彻底避免野指针访问。
  • 移除错误的somma函数:用正确的数学公式计算总元素数,也可以用来做内存校验。
  • 优化填充逻辑:填充杨辉三角时,每行只遍历到j<i,最后一个元素直接设为1,减少无效循环。
  • 添加内存释放与回滚:避免内存泄漏,分配失败时及时释放已分配的内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:05:24