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

C语言内存分配问题:创建整型指针数组时触发exit code 11错误

搞定你的C语言内存分配报错问题

嘿,兄弟,我一眼就瞅出你代码里的问题了!你遇到的Process finished with exit code 11(这是段错误,也就是非法内存访问)和malloc相关报错,根源是你把指针和数组的内存分配逻辑搞反了,还有几个类型不匹配的小坑,咱们慢慢捋:

问题出在哪?

  • 指针没初始化就瞎用:你定义的int *a和int *b只是空指针,根本没分配能存4个元素的数组空间。直接用a[i]去访问内存,相当于乱摸别人的地盘,系统肯定给你报错。
  • 类型完全不对:a[i]是int类型的变量,但你把malloc返回的int*指针赋值给它,这就像把一个地址塞到整数变量里,完全不是你要的效果——你应该是想创建两个能存4个整数的数组对吧?
  • 虽然scanf参数没写错,但前提是内存得合法:&a[i]确实是元素的地址,但a本身都没内存,这地址也是非法的。

怎么改?

你得先给a和b分配足够的内存,让它们变成能装4个int的数组,之后直接往数组里存整数就行,不需要给每个元素单独malloc(除非你要做二维数组,但看你代码不是这意思)。

修正后的完整代码

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

int main() {
    // 先分配能容纳4个int的数组空间
    int *a = malloc(4 * sizeof(int));
    int *b = malloc(4 * sizeof(int));

    // 必须检查malloc是否成功!内存不够时会返回NULL
    if (a == NULL || b == NULL) {
        fprintf(stderr, "Failed to allocate memory!\n");
        return 1;
    }

    for (int i = 0; i < 4; i++) {
        printf("Enter values for a[%d] and b[%d]:\n", i, i);
        // 直接读入整数到数组元素里
        scanf("%d", &a[i]);
        scanf("%d", &b[i]);
    }

    // 打印a数组的元素和地址
    for (int i = 0; i < 4; i++) {
        printf("a[%d] = %d | Address: %p\n", i, a[i], &a[i]);
    }

    // 补全你没写完的b数组打印循环
    for (int i = 0; i < 4; i++) {
        printf("b[%d] = %d | Address: %p\n", i, b[i], &b[i]);
    }

    // 用完内存记得释放,别搞内存泄漏
    free(a);
    free(b);

    return 0;
}

额外提醒

  • 每次malloc后一定要检查返回值,不然内存分配失败时后续操作全是瞎搞。
  • 动态分配的内存必须用free释放,养成好习惯,不然程序跑久了会吃满内存。
  • 打印指针地址用%p格式符,比%x更标准,%x是打印十六进制整数,%p专门给指针用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:10:54