为何这段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
相关产品推荐
相关产品推荐

