2012-10-03 56 views
-4

我写了一个C++程序,实际上它是一个游戏。 我收到此错误:关于堆腐败的错误

Windows has triggered a breakpoint in bla bla...

有人可以帮我吗?
这是代码,但行AAA出现错误:

void r_motions(char **map,int size) 
{ 
    int parameter_i,parameter_j,player_i,player_j; 
    int *r_location_i = new int[1],*r_location_j = new int[1]; 
    player_finder(map,size,player_i,player_j); 
    int r_num = robots_finder(map,size,r_location_i,r_location_j); 
    for(int i=1;i<=r_num;i++) 
    { 
     parameter_i =0; 
     parameter_j =0; 
     if(r_location_i[i]>player_i) parameter_i = -1; 
     if(r_location_i[i]<player_i) parameter_i = 1; 
     if(r_location_j[i]>player_j) parameter_j = -1; 
     if(r_location_j[i]<player_j) parameter_j = 1; 
     map[r_location_i[i]][r_location_j[i]] = '.'; 
     r_location_i[i] = r_location_i[i]+parameter_i; 
     r_location_j[i] = r_location_j[i]+parameter_j; 
    } 
    for(int i=1;i<=r_num;i++) 
    { 
     switch (map[r_location_i[i]][r_location_j[i]]) 
     { 
     case '.': 
      map[r_location_i[i]][r_location_j[i]] = '+'; 
      break; 
     case '@': 
      map[r_location_i[i]][r_location_j[i]] = '+'; 
      print_map(map,size); 
      cout << "Robots win ." << endl; 
      sleep(1000); 
      exit(1); 
      break; 
     case '+': 
      map[r_location_i[i]][r_location_j[i]] = '*'; 
      break; 
     case '*': 
      map[r_location_i[i]][r_location_j[i]] = '*'; 
      break; 
     default: cout << "what r u doin' ??"; 
      break; 
     } 
    } 
} 
+0

所以,你不会告诉我们完整的错误,或告诉我们它实际上发生了哪一行,而且你还没有尝试简化你的代码来找出哪个功能导致问题? – Useless

+0

你确定'map'指向一个有效的数组吗?乍一看,我会说你正在用指针做一些可怕的事情,为了安全起见,应该把它们包装在类中,并且/或者使用STL容器。 – Beta

回答

3

没事,只是个开始,看看这个:

int *r_location_i = new int[1], ...; 
... 
for(int i=1;i<=r_num;i++) 
    { 
    parameter_i =0; 
    ... 
    if(r_location_i[i]>player_i) parameter_i = -1; // reading outside the array 
    ... 
    r_location_i[i] = r_location_i[i]+parameter_i; // writing outside the array 
    ... 
    } 

回去研究阵列。 直到您确切知道上面的代码出了什么问题之前,请勿触摸另一个指针