首页 > 编程语言 >C++类指针未初始化导致访问成员变量时报段错误

C++类指针未初始化导致访问成员变量时报段错误

时间:2024-01-28 10:11:26浏览次数:28  
标签:初始化 gcc 成员 C++ 访问 test 指针

# 安装gcc和g++
yum install gcc
yum install gcc-c++.x86_64
// a.cpp

#include <iostream>
#include <unistd.h>

using namespace std;

class Test {
public:
    void test1() {
    }

    void test2() {
        age = 10;
    }

private:
    int age;
};

int main() {
    Test* test;
    test->test1();
    sleep(20);
    test->test2();
}
# -g加入调试信息
g++ a.cpp -g -o a

一个窗口在./a,另一个窗口gdb调试。

C++编译时确定成员函数地址,未初始化的类指针调用成员函数时直接通过函数地址调用,访问成员变量会报段错误。
除此之外,C++段错误可能原因有访问只读或者不存在的内存地址和数组越界。

标签:初始化,gcc,成员,C++,访问,test,指针
From: https://www.cnblogs.com/WJQ2017/p/17992516

相关文章

  • C++线程安全:共享数据的完美守护者
     概述:C++中,为解决线程间共享数据问题,常用互斥锁。通过定义共享数据和互斥锁,编写线程函数,并在操作前使用互斥锁,确保线程安全。在实际应用中,注意选择合适的同步工具和控制互斥锁粒度,提高并发性能。在C++中,线程间共享数据可能会导致竞态条件(RaceCondition)和数据不一致性的问题......
  • py 学习(c++ to py)
    py1:print2024-01-2723:18:57星期六#这里是注释#py1:基础print总结'''aaa有时候也用三个单引号当注释但其实是字符串交互式会输出'''print("helloworld")print("自动换行")print("hello","world","逗号隔开自动空格")pri......
  • 一文总结现代 C++ 中的初始化
    本文尝试回答:现代C++有哪几种初始化形式?分别能够用于什么场景?有什么限制?MyClassobj();为什么没有调用默认无参构造函数创建一个对象?newint和newint()有什么区别?直接初始化、拷贝初始化、列表初始化、默认初始化、值初始化、类内初始值、构造函数初始值列表的区别与......
  • 从C向C++5——友元和string
    一.对象特性(续)1.空指针访问成员函数C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。如果用到this指针,需要加以判断保证代码的健壮性。如果调用的成员函数不访问成员属性,那么空指针可以调用对应的成员函数,如果该函数涉及了成员属性,那么就相当于涉及了this指针,空......
  • c++实现一门计算机语言到手撸虚拟机实战200节
    1对于编程语言实现原理提供了实战。2学习之后对于JAVA,PHP,PY等语言的实现原理提供了经验平移参考3对JAVA等语言的虚拟机实现原理提供了实战参考。4加深对编程语言的驾驭和深度认知。5虚拟机是计算机系统中非常重要的组成部分,理解了虚拟机的原理和实现方式,从而更好地理解计算......
  • (坚持每天写算法)算法复习与学习part1基础算法part1-12——双指针算法
    双指针是一种思路,很多题都可能用得到,这里我就只选取Acwing网站的三道题(事实上我最近就是在这里刷题,leetcode反而不怎么去了,刷完这个网站的我就会去leetcode刷了)双指针一般来讲会在数组有序的情况下应用,但是如果是无序的也是有可能的,两个指针会遍历整个数组(如果条件允许的......
  • 如果在循环中不改变vector的大小,C++编译器是否会将.size()优化为常数?
      在C++中,可以使用以下代码计算vector<int>中所有元素的和:vector<int>v={1,3,7,9};sums=0;for(inti=0;i<v.size();i++){sums+=v[i];}  这是一段很普通的代码,问题在于:在这段代码中,v.size()会在循环开始前仅计算一次?还是会在每次循环中都计算一次......
  • C转C++速成浅入浅出系列——STL之bitset
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。bitset【bitset:位集,比特集】理解为比特集。特点是①只能存入0与1②小端存储(可参阅计算机组成原理知识,表现为按b[i]增序输出时会倒序输出)需提供头文件#include<bitset> 创建注:①存储时......
  • 数组:讲解一维数组和多维数组的声明、初始化和访问。
    一维数组是最简单的数组形式,它可以存储一系列相同类型的元素。多维数组则是由多个一维数组组成的数据结构,可以用于存储多维数据。下面我将分别讲解一维数组和多维数组的声明、初始化和访问。一维数组一维数组的声明和初始化可以分为两步进行。声明一维数组在C语言中,可以使用以下语......
  • c++重载
    函数或运算符重载是指在同一作用域内定义多个具有相同名称但参数类型或数量不同的函数或运算符。重载允许使用相同的名称执行不同的操作,具体的操作根据传递给函数或运算符的参数类型或数量而定。(和Java重载一样直接和Java重载联系到一起)大致分为两类函数和运算符的重载函数重载:......