問題標題可能看起來很奇怪,但這似乎是我的代碼中的一個奇怪的錯誤,我無法弄清楚。與std :: cin一起使用二維雙數組給出奇怪的SEGFAULT
1 #include "linkern.h"
2 #include "linkern-inl.h"
4 #include <iostream>
5 #include "tsp.h" //contains macro MAX_CITIES
6
7 extern bool euclidean;
8 extern double dist[MAX_CITIES][MAX_CITIES];
9
10 void LinKernighan::inputData()
11 {
12 char buf[20];
13 int no_cities;
14 double coords[MAX_CITIES][2];
15 double distance[MAX_CITIES][MAX_CITIES]; //works fine if this is commented out
16 std::cin.getline(buf, 20);
17 if (buf[0] == 'e') // if euclidean TSP
18 euclidean = true;
19 else
20 euclidean = false;
21 std::cin>>no_cities;
22 Tour::NUM_CITIES = no_cities;
23 nearest_neighbours.reserve(Tour::NUM_CITIES);
24 for (int i=0; i<Tour::NUM_CITIES; i++)
25 std::cin>>coords[i][0]>>coords[i][1];
26 for (int i=0; i<Tour::NUM_CITIES; i++)
27 {
28 for (int j = 0; j < Tour::NUM_CITIES; ++j)
29 {
30 std::cin>>distance[i][j]; //works fine if this is commented out
31 //dist[i][j] = round(dist[i][j]);
32 }
33 }
34 }
2-d雙陣列的聲明使我在gdb執行下一個std::cin.getline()
語句時得到以下錯誤:
Program received signal SIGSEGV, Segmentation fault.
0x000000000040245e in widen (__c=10 '\n', this=0x7ffff7dd7d60) at /usr/include/c++/4.7/bits/locale_facets.h:871
871 this->_M_widen_init();
這似乎很好地工作,如果我只用extern dist
變量。如果我保留distance
的聲明,但不要在第30行中使用它,它也可以很好地工作。當然,這只是我的大型tsp.cc文件的代碼片段。如果有人需要更多信息,我很樂意提供。我只希望自己在睡眠不足的狀態下沒有錯過任何明顯的事情。 :)
我使用gcc版本4.7.3(Ubuntu的/ Linaro的4.7.3-1ubuntu1)
在行'std :: cin >> distance [i] [j];'它是否正確運行了一段時間,然後最終崩潰或在第一個循環中崩潰 – SirGuy
實際上遇到行std :: cin.getline(buf,20)本身沒有進入循環。我想peterept給出的答案似乎持有水 – krypto07