为什么这会导致分段错误?

2023-12-22

我一直在 C++ 项目中对此进行编码,通常我不会遇到太大的分段错误问题,但我是 C++ 新手。基本上我正在创建一个指向 IntList 的指针,并调用 prepend() 从指针创建一个 IntList 。问题是,当调用 prepend 时,它会卡在头文件中的某个位置,然后退出。我不知道是什么原因造成的,gdb 告诉我它只是卡在标题处。非常感谢您的帮助,例如关于我做错了什么的提示或线索。谢谢。

IntList.h:

#ifndef _INTLIST_H
#define _INTLIST_H

#include <string>
#include <cstring>
using namespace std;

class EmptyIntList;

class IntList
{
public:
     static IntList *emptyList();
     //static IntList *fromString(string s);                                                                                                                                                         

     virtual bool     isEmpty();
     IntList *prepend(int n);
     virtual int      head();
     virtual IntList *tail();
     string   toString();

     //     virtual int      length();                                                                                                                                                               
     //     virtual IntList *append(IntList *lst);                                                                                                                                                   

     //     virtual int      operator[](int n);                                                                                                                                                      

     //     virtual ~IntList();                                                                                                                                                                      

protected:
     IntList();
     IntList(IntList &);
     //     const IntList &operator=(const IntList &);                                                                                                                                               
private:
     int      data;
     IntList *rest;
};


IntList *operator+(IntList &lst1, IntList &lst2);
ostream &operator<<(ostream &outStream, IntList *lst);
ostream &operator<<(ostream &outStream, IntList &lst);

#endif

IntList.cpp:

#include "IntList.h"
#include "EmptyIntList.h"
#include <sstream>

IntList::IntList(){}

IntList *IntList::emptyList(){

  return ( (IntList*)EmptyIntList::emptyList() );

}

bool IntList::isEmpty(){

  return false;

}

IntList *IntList::prepend(int n){

  IntList *x;

  IntList y;

  *x = y;

  y.data = n ;

  y.rest = x ;

  return x;

}

int IntList::head(){

  return data;

}

IntList *IntList::tail(){

  return rest;

}

测试IntList.cpp:

int main()
{
  int n;
  IntList *x;
  n=6;

  x->prepend(n);
  //  cout << x->toString();                                                                                                                                                                         
  return 0;

}

gdb 一步一步:

8   int main()
(gdb) step
12    n=6;
(gdb) 
14    x->prepend(n);
(gdb) 
IntList::prepend (this=0x0, n=6) at IntList.cpp:30
30    IntList y;
(gdb) 
IntList (this=0x7fff93ecb3c0) at IntList.cpp:12
12  IntList::IntList(){}
(gdb) 
IntList::prepend (this=0x0, n=6) at IntList.cpp:32
32    *x = y;
(gdb) 
IntList::operator= (this=0x401650) at IntList.h:18
18  {
(gdb) 

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401361 in IntList::operator= (this=0x401650) at IntList.h:18
18  {

IntList *x;

这是未初始化的,它指向的值也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这会导致分段错误? 的相关文章

  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • Qt中正确的线程方式

    我的图像加载非常耗时 图像很大 并且在加载时也完成了一些操作 我不想阻止应用程序 GUI 我的想法是在另一个线程中加载图像 发出图像已加载的信号 然后用该图像重绘视图 我的做法 void Window loadImage ImageLoad
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 编写专门用于类及其子类的函数模板

    我正在尝试编写一个函数模板 一个版本应该用于不满足另一版本标准的所有类型 当参数是给定类的基类或该类本身时 应使用另一个版本 我尝试过超载Base 但是当类派生自Base 他们使用通用的 而不是特定的 我也尝试过这种 SFINAE 方法 s
  • C# ToString("MM/dd/yy") 删除前导 0 [重复]

    这个问题在这里已经有答案了 可能的重复 格式化 NET DateTime Day 不带前导零 https stackoverflow com questions 988353 format net datetime day with no
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 宏观评价[重复]

    这个问题在这里已经有答案了 可能的重复 未定义的行为和序列点 https stackoverflow com questions 4176328 undefined behavior and sequence points 我无法理解以下宏
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015

随机推荐

  • 出现异常时继续执行

    下面是我要执行的脚本 这里的问题是一旦发生异常它就会停止执行 我用过continue在 catch 块中 但这不起作用 即使发生异常后 我如何让它工作 它应该循环foreach 我也用过一个while true 循环 但进入了无限循环 该怎
  • 注解反射(使用 getAnnotation)不起作用

    我必须按照代码来检查我的实体是否model has a nullable false或字段上的类似注释 import javax persistence Column import private boolean isRequired It
  • jhipster - gyp 动词 `which` 失败错误:未找到:python2

    以下是当我尝试使用 JHipster 生成新项目时出现的错误 gyp verb check python checking for Python executable python2 in the PATH gyp verb which f
  • 是否强制要求短路逻辑运算符?以及评估顺序?

    有ANSI标准吗mandate在 C 或 C 中要短路的逻辑运算符 我很困惑 因为我记得 K R 书中说你的代码不应该依赖于这些被短路的操作 因为它们可能不会 有人可以指出标准中哪里说逻辑操作总是短路的吗 我对 C 最感兴趣 对于 C 的答
  • 使用动态 form_class 更新视图

    我想动态改变form class of an UpdateViewDjango 1 6 中的 CBV 我尝试使用 get context data 来执行此操作 但这没有帮助 因为表单已经初始化 所以这需要在 init 我猜 这是我尝试过的
  • R中的zoo对象和ts对象有什么区别?

    我想知道使用上的差异ts or zoo 功能 动物园对象的索引属性中的时间值 可能不规则 在控制台上显示为行名称print zoo方法以及矩阵或原子向量中的值 这些值对可以使用的值进行了限制 通常是数字 但必须全部是单一模式 即不是像数据帧
  • 我应该在程序结束时删除 C++ 中的大树集合还是将其留给操作系统? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这可能是个有点愚蠢的问题 我应该打电话吗delete在节目结束时的巨大地图 场景上 假设整个程序都需要地图 集合 delete是返回前的最后一行
  • tumblr 和 google+ 如何像拼图一样堆叠图像?

    我想要制作一个图像库 并且想知道如何像 Google 和 tumblr 那样堆叠图像 我的意思是 当你查看 tumblr 的存档页面时 它们都堆积在列中 http the overlook hotel tumblr com archive
  • Azure 网站支持的最大域数

    我们正在构建一个托管服务 每个用户在注册时都会在我们的服务域上获得一个自定义子域 例如john myservice com 我们通过在 Azure 网站的域管理器中添加通配符条目来处理此问题 myservice com Azure 网站现在
  • Heroku 上的回形针?

    我很好奇是否有人可以在不使用 S3 的情况下在 Heroku 上工作 我假设 Heroku 是一个只读系统 但必须有某种方法可以在那里保存图像 您无法写入 Heroku 的文件系统 因此无法按照您想要的方式保存图像 您的选择是使用 S3 等
  • django-rest-auth 重置密码 uid 和令牌

    我们的团队在后端使用 django rest api 进行项目 并在前端进行响应 对于身份验证 我们使用 django rest auth 并且我们在密码重置方面遇到问题 这里的网址 urlpatterns url r accounts i
  • 如何在 AngularJS 中异步加载谷歌地图?

    现在我已经找到了一种在以下方法的帮助下初始化 Google 地图的方法安迪 乔斯林 https stackoverflow com users 1397051 andy joslin在这个SO在 angularjs 中初始化 google
  • 使用 ReverseLayout recyclerview 将项目添加到 Endless Scroll RecyclerView

    在普通的回收器视图中 最新的项目都位于顶部 如果您将项目添加到回收器视图中 它会将现有项目向下推 新项目占据顶部位置 在reverseLayout recyclerview中 最新的项目都位于底部 如果您将项目添加到recyclerview
  • 如何在 Maven 项目中添加 Flight Recorder 启用标志?

    我正要开始使用Java 任务控制 5 3 0 我已经添加了 XX 解锁商业功能 XX FlightRecorder进入我的网络应用程序的 jetty template 然后我启动网络应用程序mvn 码头 运行 但是当我开始的时候飞行记录仪我
  • CSV 文件上传不适用于 Codeigniter

    我正在使用下面的代码上传 csv 文件 它总是说 无效文件错误 我该如何解决这个问题 这是我的表格
  • 运行多个 UI 线程

    跳到底部查看问题 这只是一些额外信息 我正在使用一个组件 GeckoFX 来渲染一些网站 很好 但它只能在 Windows 窗体中使用 因为它必须绑定到可以绘制的 WinForms 对象 因为所有 WinForm 都在同一个线程中运行 所以
  • 角度组件没有被破坏

    在角度应用程序中 每次我路由到新页面时 之前页面的组件都会保留在内存中 它没有被破坏 当我路由回该页面时 它会创建一个新实例 应用程序不是通过 Angular CLI 创建的 它是一个使用 Angular 网站上提供的 webpack 配置
  • javascript字符串解释为对象

    从生产的角度来看可能无关紧要 但我想知道为什么会这样 字符串文字被解释为对象 function fancyCallback callback callback this console log typeof this just to see
  • 替换 CSV 字符串中的值

    我有一个以逗号分隔的产品列表 由于项目列表已替换为新产品项目 我正在尝试使用新产品项目列表修改此 CSV 列表 create table tmp id int identity 1 1 not null plist varchar max
  • 为什么这会导致分段错误?

    我一直在 C 项目中对此进行编码 通常我不会遇到太大的分段错误问题 但我是 C 新手 基本上我正在创建一个指向 IntList 的指针 并调用 prepend 从指针创建一个 IntList 问题是 当调用 prepend 时 它会卡在头文