0

I'm working on a maze-solver robot for my arduino project. I want my robot to memorize the maze and then find the shortest path. I keep having a problem when the char array's lenght is 3.

The problem appears when the lenght is <= 3, so I tried diffrent stuff to make a particular case out of that, that's why the if (strlen(a) > 3) is there.

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

int main()
{
    char a[] = "LLLBLLLRBLLBSRSRS";
    char b[200];

    while(strcmp(a, b) != 0) {
        strcpy(b, a); //sa verific daca se schimba sirul, daca nu inseamna ca a ajuns la minim
    for(int i = 0; i < strlen(a) - 2; i++)
    {
        if(a[i] == 'L' && a[i + 1] == 'B' && a[i + 2] == 'R') //if urile astea cauta combinatii de cate 3 miscari sa optimizezi drumul
        {
            a[i] = 'B';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
            else a[i + 1] = '\0';
        }

        else if(a[i] == 'L' && a[i + 1] == 'B' && a[i + 2] == 'S')
        {
             a[i] = 'R';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
             else a[i + 1] = '\0';

        }

        else if(a[i] == 'L' && a[i + 1] == 'B' && a[i + 2] == 'L')
        {
             a[i] = 'S';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
            else a[i + 1] = '\0';
        }

        else if(a[i] == 'S' && a[i + 1] == 'B' && a[i + 2] == 'L')
        {
             a[i] = 'R';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
            else a[i + 1] = '\0';
        }

        else if(a[i] == 'S' && a[i + 1] == 'B' && a[i + 2] == 'S')
        {
             a[i] = 'B';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
            else a[i + 1] = '\0';
        }

        else if(a[i] == 'R' && a[i + 1] == 'B' && a[i + 2] == 'L')
        {
             a[i] = 'B';
            if (strlen(a) > 3) strcpy(a + i + 1, a + i + 3);
            else a[i + 1] = '\0';
        }
    }
     cout << a << endl;
    }


    return 0;
}

This is the output:

LLSLLBRRSRS LLSLBRSRS LLSBSRS LLBRS LBS

and then the error message Runtime error(Exit status:139(Invalid memory reference)).

The goal is to make the last output be R, because LBS means R. Thanks for the attention!

1 Answers1

0

The reason for invalid memory reference is in the loop consition:

for(int i = 0; i < strlen(a) - 2; i++)

you are accessing a[i + 2] inside loop so the last iteration must end at i < strlen(a) - 3:

for(int i = 0; i < strlen(a) - 3; i++)

this just fixes your memory problem. you still get LBS as the last output.

Oblivion
  • 7,176
  • 2
  • 14
  • 33