使用指向指针 C++ 的指针时出现分段错误

     2023-02-21     259

关键词:

【中文标题】使用指向指针 C++ 的指针时出现分段错误【英文标题】:segmentation fault when using pointer to pointer C++ 【发布时间】:2015-11-09 20:29:49 【问题描述】:

我一直在尝试使用指向指针的指针来执行类似于树中的中序遍历的操作。这是我的代码

struct node 
    char c = '\0';
    int freq = 0;
    node *left = NULL;
    node *right = NULL;
    string code = "";
;

void appendones(node **n) 
    if ((*n) == NULL)
        ;
    else 
        (*n)->code += "1";
        appendones(&(*n)->left);
        appendones(&(*n)->right);
    


void combinenodes(node *a, node *b, node **n) 
    appendones(&a);
    appendones(&b);
    //(*n)=newNode('\0',a->freq+b->freq);
    (*n)->c = '\0';
    (*n)->freq = a->freq + b->freq;
    (*n)->left = a;
    (*n)->right = b;


int main() 
    N = input();
    priority_queue<node, vector<node *>, compareNodefreq> nodefreq; // function object
    for (int i = 0; i < N; i++) 
        char s;
        int freq;

        cin >> s >> freq;
        node *n = newNode(s, freq);
        nodefreq.push(n);
    

    // printheap(nodefreq);

    // perform combining nodes based on frequencies
    while (nodefreq.size() > 1) 
        node *a = nodefreq.top();
        nodefreq.pop();
        node *b = nodefreq.top();
        nodefreq.pop();

        node *n;
        combinenodes(a, b, &n);
        nodefreq.push(n);
    

我在(*n)-&gt;code+="1"; 中遇到appendone() 的分段错误。

我无法找出错误。我的理解是我正在路过 引用指针并执行appendzero()appendone(), 所以我想那部分没有错误。还有我的ab combinenodes() 不能为空,因为我正在从堆栈中弹出。

你能帮我弄清楚吗?

【问题讨论】:

请修正您的格式并将代码修剪为minimal reproducible example。 并尝试自己调试代码。这类错误通常很容易被调试器检测到。 @BaummitAugen,已修复,现在可以帮忙吗? 您能发布完整的确切段错误消息吗?还有newNode()? 使用调试器并阅读关于 C++ 的 book。不给你new 【参考方案1】:

哦,我明白了。在main()while 循环中,n 被推送并稍后使用,但由于节点对象本身从未在combinenodes() 中分配(当前已注释掉)而无效。那么,指针值是未定义的,但在这种情况下,结果是非零,从而破坏了安全检查。

【讨论】:

这可能不是唯一的问题。队列声明本身似乎在恳求清白的终结……paste.ubuntu.com/13211286 确实如此。在您所指的 TODO 旁边,提到了 node*,而上面的代码使用了 node。不过,我对priority_queue 类型并不熟悉,并且执行已通过推动到达段错误。 OP 的回复会很有趣。

在 C++ 中使用指针的数组:访问返回的数组时出现分段错误

】在C++中使用指针的数组:访问返回的数组时出现分段错误【英文标题】:arraysusingpointersinc++:segmentationfaultwhenaccessingthereturnedarray【发布时间】:2016-11-2817:06:12【问题描述】:我是C++新手,我正在尝试使用指向指针的指针构建一... 查看详情

添加指向数组的指针时出现分段错误

...始化一个指向Student对象的指针数组(pStudents)(我不能使用向量),初始化为null。当我使用函数addStudent将学生添加到班级时,我希望能够在指针数组中 查看详情

尝试使用指向 char* 的指针时出现总线错误 10 或分段错误 11,具体取决于封装

】尝试使用指向char*的指针时出现总线错误10或分段错误11,具体取决于封装【英文标题】:buserror10orsegmentationfault11whentryingtousepointerstochar*dependingonencapsulation【发布时间】:2014-09-1606:38:48【问题描述】:我正在尝试使用基本char*并... 查看详情

尝试从方法返回指向对象的指针时出现分段错误

】尝试从方法返回指向对象的指针时出现分段错误【英文标题】:Segmentationfaultwhiletryingtoreturnapointertoobjectfromamethod【发布时间】:2016-06-0611:06:21【问题描述】:g++在我尝试从classA的方法返回classB的对象时抛出“分段错误”。我不... 查看详情

将值分配给指针C++时出现分段错误

】将值分配给指针C++时出现分段错误【英文标题】:SegmentationFaultwhenassigningvaluetoapointerC++【发布时间】:2020-07-2110:59:35【问题描述】:当我运行以下并行代码时,我在第18行(两次打印之间)的分配处遇到分段错误。我真的不明... 查看详情

使用/指针创建 3D 数组时出现分段错误(核心转储)

】使用/指针创建3D数组时出现分段错误(核心转储)【英文标题】:SegmentationFault(CoredDumped)WhenCreating3DArrayw/Pointers【发布时间】:2014-01-2502:44:29【问题描述】:提前感谢您的帮助!我目前正在阅读AlexAlllain的“JumpingintoC++”,到目... 查看详情

返回指针时出现分段错误[关闭]

...到了Segfault。我读过其他类似的问题,但OP正在返回一个指向局部变量的指针。在这里,我实际上是在返回一个本地指针。s 查看详情

删除时出现分段错误

...树时出现。这段代码很简单,我有一个Node类,其中包含指向其子节点的指针。#include<vector>classNodepublic:intdata1,data2;std::vector& 查看详情

使用指向具有 unordered_map 作为成员的类的指针时出现段错误

】使用指向具有unordered_map作为成员的类的指针时出现段错误【英文标题】:Segfaultwhenusingpointertoclasswithunordered_mapasmember【发布时间】:2016-08-2509:39:39【问题描述】:我正在尝试实现我自己的类,它有一个unordered_map作为成员。现... 查看详情

返回指针时出现分段错误

...在尝试用C语言编写一个可以获取环境变量的代码,然后使用strstr从该结果中搜索特定的单词。我正在使用UBUNTU操作系统和gcc编译器。这是我编写的代码。评论是我预期会发生的。#include<stdio.h>#include<strin 查看详情

在指针迭代中使用 for 循环时出现分段错误

】在指针迭代中使用for循环时出现分段错误【英文标题】:Segmentationfaultwhileusingforloopinpointeriteration【发布时间】:2018-07-1708:30:45【问题描述】:这是我编写的一小段代码,用于测试我对指针的了解:int*grades;*(grades+0)=100;*(grades+1)... 查看详情

为啥在尝试使用指针访问结构时出现此分段错误?

】为啥在尝试使用指针访问结构时出现此分段错误?【英文标题】:whyamigettingthissegmentationfaultwhentryingtoaccessastructusingapointer?为什么在尝试使用指针访问结构时出现此分段错误?【发布时间】:2020-12-1206:21:22【问题描述】:我正... 查看详情

在 C++ 中使用链表时出现空指针异常

】在C++中使用链表时出现空指针异常【英文标题】:NullPointerexceptionwhileusingLinkedListinc++【发布时间】:2021-12-0914:42:07【问题描述】:我遇到了“读取访问冲突”或“分段错误”的错误。这是我的代码:#include<iostream>usingnamespa... 查看详情

使用基类中定义的函数返回指向派生类实例的指针时出现无效转换错误

】使用基类中定义的函数返回指向派生类实例的指针时出现无效转换错误【英文标题】:Invalidconversionerroronreturningapointertoinstanceofaderivedclassusingfunctiondefinedinthebaseclass【发布时间】:2014-02-1501:06:19【问题描述】:这可能是一个微... 查看详情

为啥在访问二级指针时出现分段错误错误? C语言

...:以下代码在运行时生成分段错误错误...只是因为我尝试使用p_list3(二级指针)打印其内容或为其分配一些东西. 查看详情

尝试获取指向向量大小的指针时出现编译错误

...】:我有一个名为arr的std::vector&lt;int&gt;实例,我想使用指针来处理它的长度。我的声明unsignedint*ptr=&arr.size();给我一​​个编 查看详情

在调用函数中取消引用指针时出现分段错误

】在调用函数中取消引用指针时出现分段错误【英文标题】:Segmentationfaultwhiledereferencingthepointerinthecallingfunction【发布时间】:2018-02-2306:10:45【问题描述】:当我运行以下代码时,我得到了分段错误错误,我无法纠正我的错误。v... 查看详情

在指向向量的智能指针上使用 push_back() 时出现运行时错误

】在指向向量的智能指针上使用push_back()时出现运行时错误【英文标题】:Runtimeerrorwhenusingpush_back()onsmartpointertovector【发布时间】:2019-04-1818:04:33【问题描述】:我正在尝试通过取消引用智能指针来填充向量。在运行期间,程序... 查看详情