分段错误(核心转储)!结构,数组

时间:2015-09-20 23:10:48

标签: arrays struct

在我的' for循环'中收到错误。

程序编译并执行,

但是当我尝试使用案例NEW_GAME中的代码时:在我的switch语句中,该程序会挂起'然后输出'分段错误(核心转储)' 我认为这意味着该程序试图访问一些内存但我不明白为什么会发生这种情况。 ..

...因为我尝试在每个索引处手动填充 new_map.items [index] .type ,它运行正常!

每次我注释循环程序将以我想要的方式运行。所以我相信它的循环。



消息代码:

struct MapItem {

char type = 'E';    

};

struct Map {

int size;
MapItem *items;

};

int main(){

int selection;
int map_size;
Map new_map;
MapItem new_map_item;


enum MenuOptions {
 INIT = -1,
 NEW_GAME =1,
 PRINT_MAP,
 BUILD,
 EXIT_PROGRAM
};

while (selection != EXIT_PROGRAM) {

  cout << endl;
  cout << NEW_GAME<< ". New Game" << endl;
  cout << PRINT_MAP << ". Print Map" << endl;
  cout << BUILD << ". Build Something" << endl;
  cout << EXIT_PROGRAM << ". Exit" << endl;

  //get selection , cin >> int , return int,
  selection = get_selection();

  switch (selection) {

 case NEW_GAME:

//int map size (just extra variable i wanted to add)
//create_new_game () returns int , gets size for map.
// map is a one dimensional array of chars. map size will be a
// square (size*size) 

        map_size = create_new_game();
        new_map.size = (map_size*map_size);
        new_map.items = &new_map_item;

        // test statements, code works if for loop is not there
        cout << new_map.size;
        cout << new_map.items[0].type;

        //
        //   ! WHERE ERROR OCCURS !
        //

        for ( int index = 0; index <= (new_map.size); index++ ) {
            new_map.items[index].type = new_map_item.type;
        }

         break;




    **COMMAND LINE INPUT/OUTPUT:**

    $ make
    g++ -std=c++11 -c -Wall main.cpp
    g++ -std=c++11 main.o -o driver


    $ ./driver.exe

    1. New Game
    2. Print Map
    3. Build Something
    4. Exit
    Enter your selection: 1

What size map would you like? 3
Segmentation fault (core dumped)

2 个答案:

答案 0 :(得分:1)

for ( int index = 0; index <= (new_map.size); index++ ) {

是否会超越地图的末尾 - 索引运行0到n-1,你使用0到n。

应该是

for ( int index = 0; index < (new_map.size); index++ ) {

答案 1 :(得分:-1)

我修复了运行时错误,修正了,改变了循环中的条件

for ( int index = 0; index < map_size; index++ ) {
                new_map.items[index].type = new_map_item.type;
                cout << index;
}

其中map_size是一个带有更新值的int,但仍然不确定这有什么意义但是有效。