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

为何这段C++代码触发段错误?指针新手求助

段错误原因及修正方案

错误原因

你这段代码触发段错误的核心是野指针非法访问:

  • new libro_t*[MAXIMO_LIBROS_INICIAL]只是创建了一个能容纳20个libro_t*类型指针的数组,但数组里的每个指针都没有初始化,指向的是随机内存地址(也就是野指针)。
  • 当你执行libros[tope_libros]->titulo = "hola"时,相当于通过野指针去读写内存,这属于非法操作,直接触发段错误。

正确写法

方式一:先为指针分配结构体实例

先给数组中的指针创建对应的libro_t结构体对象,再访问成员:

const int MAXIMO_LIBROS_INICIAL = 20;

typedef struct {
    string titulo;
    char genero;
    int puntaje;
} libro_t;

int main(){
    libro_t** libros = new libro_t*[MAXIMO_LIBROS_INICIAL];
    int tope_libros = 0;

    // 先为当前指针分配结构体内存
    libros[tope_libros] = new libro_t;
    // 访问结构体成员
    libros[tope_libros]->titulo = "hola";

    // 记得释放内存,避免泄漏
    delete libros[tope_libros];
    delete[] libros;

    return 0;
}

方式二:直接创建结构体数组(更简洁)

如果不需要单独管理每个结构体的生命周期,直接创建libro_t类型的数组,无需二级指针:

const int MAXIMO_LIBROS_INICIAL = 20;

typedef struct {
    string titulo;
    char genero;
    int puntaje;
} libro_t;

int main(){
    libro_t* libros = new libro_t[MAXIMO_LIBROS_INICIAL];
    int tope_libros = 0;

    // 直接通过数组下标访问结构体成员
    libros[tope_libros].titulo = "hola";

    // 释放数组内存
    delete[] libros;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:55:24