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

     2023-02-21     149

关键词:

【中文标题】尝试使用指向 char* 的指针时出现总线错误 10 或分段错误 11,具体取决于封装【英文标题】:bus error 10 or segmentation fault 11 when trying to use pointers to char* depending on encapsulation 【发布时间】:2014-09-16 06:38:48 【问题描述】:

我正在尝试使用基本 char* 并且可以设法在 main 中执行此操作,但是当尝试将其放入另一个函数中,然后在 main 中调用该函数时,我有时会遇到总线错误或分段错误,但我不确定为什么。

此代码按我预期的方式工作:

#include <iostream>
using namespace std;

int main(void)
    cout << "enter name:" << endl;
    char *name[10];
    cin >> *name;
    cout << "hello: " << *name << endl;

    return 0;

输出是:

enter name:
alex
hello: alex

但是当我这样做时:

#include <iostream>
using namespace std;

void sayhello()
    cout << "enter name:" << endl;
    char *name[10];
    cin >> *name;
    cout << "hello: " << *name << endl;        


int main(void)
    sayhello();

    return 0;

它编译得很好,输出会询问名称,但我收到一个总线错误:10。输出是:

enter name:
alex
Bus error: 10

我遇到的另一个问题是,当我似乎在做一个非常相似的任务,但在 main 中明确地做同样的事情并添加另一个函数时,我得到了一个分段错误:11。我的代码是:

#include <iostream>
using namespace std;

void sayhello()
    cout << "enter name:" << endl;
    char *newname[10];
    cin >> *newname;
    cout << "hello: " << *newname << endl;        


void testprint()
    cout << "this is a test" << endl;


int main(void)
    testprint();

    cout << "enter name:" << endl;
    char *name[10];
    cin >> *name;
    cout << "hello: " << *name << endl; 

    sayhello();

    return 0;

我的输出是:

this is a test
enter name:
alex
enter name:
Segmentation fault: 11 

这对我来说没有任何意义,而且我不确定为什么会出现两个不同的错误。

【问题讨论】:

你需要了解更多关于指针的知识。未初始化的指针未指向有效位置。 由于使用了未初始化的指针,您的所有程序都未定义。第一个做你所期望的只是因为运气不好。 同一代码中的不同错误意味着未定义的行为。所以做一个指针的初始化,看看你是否得到任何错误。 (char *name = new char[10];) 【参考方案1】:

线

char *name[10];

定义一个尚未初始化的10char*对象数组。也许,您打算使用:

char name[10]; // An array of 10 chars.
cin >> name;

【讨论】:

【参考方案2】:

指向 char 的指针会让初学者感到困惑。我会建议以下几点:

void sayhello()
    cout << "enter name:" << endl;
    char name[10];
    cin >> name;
    cout << "hello: " << name << endl;        

正如于浩所说,你必须先了解更多关于指针的知识。

【讨论】:

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

】尝试获取指向向量大小的指针时出现编译错误【英文标题】:Compilationerrorwhentryingtoobtainapointertothesizeofavector【发布时间】:2020-07-0516:53:00【问题描述】:我有一个名为arr的std::vector&lt;int&gt;实例,我想使用指针来处理它的... 查看详情

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

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

尝试从常量 char * 类型的指针复制数据时出现“超出内存访问”错误。为啥?

】尝试从常量char*类型的指针复制数据时出现“超出内存访问”错误。为啥?【英文标题】:Getting"accessingbeyondmemory"errorwhenitistriedtocopydatafromapointeroftypeconstantchar*.Why?尝试从常量char*类型的指针复制数据时出现“超出内存访... 查看详情

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

...member【发布时间】:2016-08-2509:39:39【问题描述】:我正在尝试实现我自己的类,它有一个unordered_map作为成员。现在奇怪的是,当我在使用指向我的类的指针时调用成员函数时出现分段错误,而当我不使用指针时一切都很好。我... 查看详情

尝试使用指向成员函数的指针时出现强制转换问题

】尝试使用指向成员函数的指针时出现强制转换问题【英文标题】:Castingissuewhentryingtousepointerstomemberfunctions【发布时间】:2012-05-0408:57:12【问题描述】:出于多种原因,我必须使用在外部C库中定义的结构。我已经简化了我的代... 查看详情

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

...vector【发布时间】:2019-04-1818:04:33【问题描述】:我正在尝试通过取消引用智能指针来填充向量。在运行期间,程序在用于输入变量输入的第一个“for”循环的一次迭代后崩溃。usingnamespacestd;classMeasurementpr 查看详情

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

...【问题描述】:这可能是一个微不足道的问题,但我正在尝试重新熟悉C++,但在这里找不到解决方案。因此,我将不胜感激 查看详情

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

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

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

...间】:2016-11-2817:06:12【问题描述】:我是C++新手,我正在尝试使用指向指针的指针构建一个3维数组。我确信有更有效的方法可以做到这一点,但我目前正在尝试理解指针。作为示例代码,我最初有以下部分,它工作正 查看详情

将指向数组的指针传递给函数时出现分段错误(C++)

...n(C++)【发布时间】:2016-11-2109:12:55【问题描述】:我正在尝试获取大量随机数,然后将该数组传递给一个函数,该函数将创建一个包含10个元素的新数组,这些元素的值与大数组中的值相对应。我将参数start传递给函数以指示大... 查看详情

C++ 指针在数据类型“int”时出现错误,但在“char”时工作正常

...char\'【发布时间】:2016-05-1623:51:23【问题描述】:我正在尝试学习C++中的指针和引用。我有以下程序。#include<iostream>usingnamespacestd;intmain()//1stst 查看详情

为什么在尝试将指向数组的指针作为函数的参数时出现访问冲突错误?(代码片段)

当我试图遍历'周五'数组时,我遇到了访问冲突错误。我试图在while循环之前检查空指针,但仍然......intlostSheep(constint*friday,constint*saturday,inttotal)intfriSum=0;intsatSum=0;inti=0;while(friday+i)friSum+=*(friday+i);i++;i=0;while(saturday+i)satSum+=*(saturday+i... 查看详情

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

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

将 char* 推送到向量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到向量中 [已解决]

...将char*推送到向量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到向量中[已解决]【英文标题】:Problempushingchar*tovector,butaftereachiterationitsaddingapointertothesamevaluesbufferintothevector【发布时间】:2019-11-0101:20:53【... 查看详情

用指向数组的指针时出现错误,怎样解决。。。。

#include<iostream.h>#include<string.h>voidsort(char(*p)[20],intn)intmax;for(intx=0;x<n-2;x++)for(inty=1;y<n-1;y++)if(strcmp(*(p+x),*(p+y))>0)max=x;x=y;y=max;*(p+max)=*(p+x);*(p+x)=*(p+y);*(p+y)=*(p+max);voidmain()intn;cout<<"请输入要排序的字符数组个数:&qu... 查看详情

尝试使用 Spark IDF.fit() 时出现 NULL 指针异常

】尝试使用SparkIDF.fit()时出现NULL指针异常【英文标题】:gettingaNULLpointerexceptionwhentryingtouseSparkIDF.fit()【发布时间】:2015-12-2216:03:46【问题描述】:尝试在Spark文档中运行此example。得到下面的错误。使用Java版本的示例也会出现相... 查看详情

尝试发送 100 MB 批处理时出现 Azure 服务总线错误

】尝试发送100MB批处理时出现Azure服务总线错误【英文标题】:AzureServiceBuserrorsoutwhentryingtosend100MBbatch【发布时间】:2021-12-2810:16:38【问题描述】:我正在尝试做一个PoC来测试AzureServiceBusPremium的最新功能,该功能可以处理大小为10... 查看详情

尝试使用 dom 解析 xml 页面时出现空指针异常

】尝试使用dom解析xml页面时出现空指针异常【英文标题】:gettingnullpointerexceptionwhentryingtoparseaxmlpagebyusingdom【发布时间】:2012-11-0411:54:06【问题描述】:我为我的xml页面编写了一个解析器,但我遇到了一个我完全不明白为什么的... 查看详情