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

如何主动触发段错误?现有测试代码陷入无限循环求解决

问题原因与解决方案

你的代码陷入无限循环的核心原因是:你只是在递增指针并打印地址,但从未对指针指向的内存执行读写操作。段错误(Segmentation Fault)只有在程序尝试访问不属于自己的内存区域时才会触发,单纯移动指针并不会触发错误。

修正后的代码

要触发段错误,必须在打印地址后尝试访问该地址的内存内容,比如读取或写入:

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

int main(){
    char *ptr = malloc(1);
    // 检查malloc是否成功(测试场景大概率成功,但养成编码好习惯)
    if (ptr == NULL) {
        perror("malloc failed");
        return 1;
    }
    
    while(1){
        printf("Address is %p\n", ptr);
        // 尝试写入内存,触发访问错误
        *ptr = 0;
        ptr++;
    }
    return 0;
}

关键说明

  1. 内存访问操作:*ptr = 0 是触发段错误的关键——当指针越界到操作系统禁止访问的内存区域时,这个写入操作会触发内存保护机制,抛出段错误。
  2. 打印顺序:先打印地址,再执行内存访问,这样就能保证触发错误前的最后一个地址被打印出来。
  3. 系统差异:不同操作系统的内存布局不同,指针需要递增到哪一区域才会触发错误没有固定值,取决于系统的内存管理策略。
  4. 安全提醒:这类代码属于不安全操作,仅用于理解内存访问边界的测试场景,不要在生产代码中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:10:33