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

C语言用指针操作100元素一维数组报segmentation fault如何解决

现有代码问题
  • 指针初始化越界:C语言数组下标从0开始,长度为100的x数组合法下标范围是0~99,&(x[100])是数组尾部之外的非法内存地址,后续对该地址及后续地址的写入操作属于越界访问,直接触发段错误。
  • 填充逻辑错误:循环中myPtr持续向后偏移,所有写入操作都落在数组之外的非法内存区域,完全没有修改数组本身的内容。
  • 访问逻辑错误:填充结束后myPtr已经偏移到x[100] + 100的位置,此时解引用*myPtr属于非法内存访问。
  • 缺少头文件:调用printf需要引入<stdio.h>头文件,否则编译会出现警告。
  • 未实现升序、降序输出的需求。
修正后完整代码
#include <stdio.h>
int main(void) {
    // 创建大小为100的一维整型数组
    int x[100];
    int *myPtr;
    int j;

    // 需求a:指针填充0~99
    myPtr = x; // 指针初始化为数组首地址,等价于&x[0]
    for (j = 0; j < 100; j++) {
        *myPtr = j;
        myPtr++;
    }

    // 需求b:指针升序输出
    printf("升序输出结果:\n");
    myPtr = x; // 指针复位到数组首地址
    for (j = 0; j < 100; j++) {
        printf("%d ", *myPtr);
        myPtr++;
    }
    printf("\n");

    // 需求c:指针降序输出
    printf("降序输出结果:\n");
    myPtr = &x[99]; // 指针指向数组最后一个元素
    for (j = 0; j < 100; j++) {
        printf("%d ", *myPtr);
        myPtr--;
    }
    printf("\n");

    return 0;
}
代码说明
  • 填充阶段指针从数组首地址开始偏移,每次写入当前下标值,确保所有数据写入数组合法内存区域。
  • 升序输出前将指针复位到首地址,依次向后遍历100个元素完成打印。
  • 降序输出前将指针指向数组最后一个合法元素x[99],依次向前遍历100个元素完成打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:54:01