我收到分段错误,但不了解分段错误发生的位置
I am receiving a segmentation fault error yet do not understand where the segmentation fault is occuring
我相信错误发生在第 16 行之前的某个地方,编译后运行时不显示第一个 cout 语句。我最困惑的一点是,甚至没有显示 main 中的第一个 cout 语句。错误可能是从我没有注意到的地方开始的,还是在我的包含语句中的某个地方开始的?我在这里不知所措,因为在真正运行任何代码之前出现 seg 错误似乎很奇怪,尤其是在 main 中。
2 #include<iostream>
3 #include<iomanip>
4 #include<sstream>
5 #include<fstream>
6 using namespace std;
8 void Show_Menu(int);
9 string* getScreen(int);
13
14 int main()
15 {
16 cout <<"Thank You for Choosing Taco Bell";
17 string* menu = nullptr;
18 menu = getScreen(1);
19 int input = 1;
20 Show_Menu(input);
21 return 0;
22 };
23
24 string* getScreen( int input)
25 {
26 string taco_burrito[] = {"Tacos and Burritos","Beef_Burrito_Supreme", "Bean_Burrito", "Beefy_Five_Layer_Burrito", "Shredded_Chicken_Burrito", "Seven_Layer_Burrito", "Taco", "Soft_ta co", "Shredded_Chicken_Soft_Taco", "Taco_Supreme", "Soft_Taco_Supreme", "Grilled_Steak_Soft_Taco", "Nacho_Cheese_Doritos_Locos_Taco" };
27 string special_items[] = {"Special Items","Cheesy_Roll_Up", "Mexican_Pizza", "Chicken_Quesadilla", "Beef_Chalupa", "Chicken_Power_Bowl", "Cheesy_Gordita_Crunch", "Crunchwrap_Supreme ", "Beef_Quesarito", "Beefy_Nacho_Griller", "Fiesta_Taco_Salad"};
28 string nacho_sides_desserts[] = {"Nachos And Desserts","Chips_And_Nacho_Cheese", "Chips_And_Guacamole", "Nachos_Supreme", "Nachos_Bell_Grande", "Chips_And_Pico", "Pintos_And_cheese" , "Fiesta_Potatos", "Black_Beans_And_Rice", "Black_Beans", "Rice", "Cinnamon_Twist", "Cinnabon_Two_Pack", "Cinnabon_Twelve_Pack"};
29 string dollar_cravings[] = { "Dollar Cravings","Beefy_Frito_Burrito", "Cheesy_Bean_Rice", "Spicy_Potato_Soft_Taco", "Shredded_Chicken_Quesadilla_Melt", "Spicy_Tostada", "Cheesy_Roll _Up", "Triple_Layer_Nachos", "Cinnamon_Twist", "Cinnabon_Two_Pack"};
30 switch(input){
31 case 1:
32 return taco_burrito;
33 break;
34 case 2:
35 return special_items;
36 break;
37 case 3:
38 return nacho_sides_desserts;
39 break;
40 case 4:
41 return dollar_cravings;
42 default:
43 cout << "Invalid Entry" <<endl;
44 }
45 };
46
47 void Show_Menu(int input = 1)
48 {
49 string* screen;
50 screen = getScreen(input);
51 cout <<"Current Screen is: " << screen[0] << endl;
52 int size;
53 size = sizeof(screen);
54 for(int i =1; i < size; i++)
55 {
56 cout << i << ". " << screen[i] << endl;
57 }
58 };
几个问题:
cout
缓冲其输出。 这意味着错误可能发生在第一个cout
语句之后,但由于cout
尚未刷新到屏幕,因此您看不到它。 如果您希望cout
立即打印到屏幕上,则应以<< std::endl
结束该行。 否则,请使用cerr
,它不会缓冲输出,会自动打印到屏幕上。- 正如@Eljay报告的那样,
getScreen
返回指向已销毁对象的指针。 如果要返回字符串的动态长度数组,则最好将函数签名更改为vector<string> getScreen(int input)
。
在"string* getScreen( int input("函数中,"taco_burrito"是一个局部变量,将存储在堆栈中。所以当线程离开时,它将被定性,这意味着你不能把它传递给其他变量。 如果你想使用"taco_burrito[]"和其他数组,你可以把它们放在"main"之外的代码之上,也许你想使用"constant"使它们不变。 我同意你看不到cout,因为cout缓冲区不会大惊小怪。你最好使用它以endl结尾。 如果它对您有帮助,我很高兴!
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 为什么我的代码包含错误分段错误(核心转储)?
- 为什么会出现此错误?- 分段错误(核心转储)
- 意外的运行时错误(分段错误)
- C++将文本文件读入数组,运行错误:分段错误
- mmap 错误:分段错误/指针无效错误
- 在我的代码中找不到错误....分段错误
- 错误:分段故障(核心转储)阵列
- 用string.h将错误分段到队列中
- c++字符串流转换错误:分段错误
- 为什么我的代码显示错误分段错误(核心转储)