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
相关产品推荐
相关产品推荐

