2013-07-16 6 views
0

Я использую VC2010 express и вижу результат, которого я не могу понять. Мой код выглядит следующим образом:(VC2010 express) 2D-массив misbehaving

// 

#include "stdafx.h" 
#include <iostream> 
#include <time.h> 

using namespace std; 

void main() 
{ 
    const int gridSize = 2; 
    int grid[gridSize][gridSize]; 

    for(int x=1; x <= gridSize; x++){ 
     for(int y=1; y <= gridSize; y++){ 
      grid[x][y] = 0; 
     } 

    } 
    for(int i=0; i <= gridSize; i++){ 
     grid[i][0] = 1; // set the horizontal line to 1's 
     grid[0][i] = 1; // set the vertical line to 1's 
    } 

    int rows = 0; 
    while(rows <= gridSize){ 
     for(int i=0; i<=gridSize; i++){ 
      cout << grid[i][rows] << " "; 
     } 
     cout << "\n"; 
     rows++; 
    } 

    clock_t wait; 
    wait = clock(); 
    while (clock() <= (wait + 500000)); // Wait for 500 seconds and then continue 
    wait=0; 
} 

Я ожидаю этот код, чтобы привести:

Вместо этого это приводит к:

Я не понимаю, как можно его для этого кода для заполнения сетки [1] [2] с 1. Любые мысли о том, что ?

EDIT: Не могу ответить на мой вопрос прямо сейчас. Но я решил проблему с решетчатыми решетками! :) Законченное с этим кодом, чтобы вычислить количество решеточных путей в сетке:

#include "stdafx.h" 
#include <iostream> 
#include <time.h> 

using namespace std; 

void main() 
{ 
    const int gridSize = 3; 
    int grid[gridSize+1][gridSize+1]; 

    for(int i=0; i <= gridSize; i++){ 
     grid[i][0] = 1; // set the horizontal line to 1's 
     grid[0][i] = 1; // set the vertical line to 1's 
    } 

    for(int x=1; x <= gridSize; x++){ 
     for(int y=1; y <= gridSize; y++){ 
      grid[x][y] = grid[x-1][y] + grid[x][y-1]; 
     } 
    } 

    cout << "Amount of lattice paths for a " << gridSize << "x" << gridSize << " grid: " << grid[gridSize][gridSize]; 

    clock_t wait; 
    wait = clock(); 
    while (clock() <= (wait + 500000)); // Wait for 500 seconds and then continue 
    wait=0; 
} 

Спасибо за быстрый ответ :)

+1

'i <= gridSize' в цикле for - мгновенный UB! Вы даже не должны платить за это! –

+0

Просто начните свой день с отладчика :) – 0decimal0

ответ

4

индексировать массив находится вне границы, например:

for(int x=1; x <= gridSize; x++){ 

должно быть:

for(int x = 0; x < gridSize; x++){ 
       ^removed = 

вы должны запустить цикл для г ndex значение [0 to gridSize), и да, это неправильное поведение называется Undefined behavior в стандарте C.

+1

hahaha this misbehave называется неопределенным поведением в C. lol – 0decimal0

+1

Правильно, я действительно намеревался, чтобы циклы for были <=, просто забыл объявить массив на gridSize + 1. Я пытался решить 15-ю проблему проекта Эйлера. – Pwnball

+0

@Pwnball Удачи Pwnball! –