尝试使用指向 char* 的指针时出现总线错误 10 或分段错误 11,具体取决于封装
Posted
技术标签:
【中文标题】尝试使用指向 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];
定义一个尚未初始化的10
char*
对象数组。也许,您打算使用:
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;
正如于浩所说,你必须先了解更多关于指针的知识。
【讨论】:
以上是关于尝试使用指向 char* 的指针时出现总线错误 10 或分段错误 11,具体取决于封装的主要内容,如果未能解决你的问题,请参考以下文章
在指向向量的智能指针上使用 push_back() 时出现运行时错误
为什么在尝试将指向数组的指针作为函数的参数时出现访问冲突错误?