#include<string>
#include<cstring>
class Solution {
    void shift_left(char* c, const short unsigned int bits) {
        const unsigned short int size = sizeof(c);
        memmove(c, c+bits, size - bits);
        memset(c+size-bits, 0, bits);
    }
public:
    string longestPalindrome(string s) {
        char* output = new char[s.length()];
        output[0] = s[0];
        string res = "";
        
        char* n = output;
        auto e = s.begin() + 1;
        while(e != s.end()) {
            char letter = *e;
            char* c = n;
            (*++n) = letter;
            if((letter != *c) && (c == &output[0] || letter != (*--c)) ) {
                ++e;
                continue;
            }
            while((++e) != s.end() && c != &output[0]) {
                if((letter = *e) != (*--c)) {
                    const unsigned short int bits = c - output + 1;
                    shift_left(output, bits);
                    n -= bits;
                    break;
                }
                (*++n) = letter;
            }
            string temp(output);
            res = temp.length() > res.length()? temp : res;
            shift_left(output, 1);
            --n;
        }
        return res;
    }
};
input string longestPalindrome("babad");
the program works fine and prints out "bab" as the longest palindrome but there's a heap overflow somewhere. Error like this appears:
Read of size 6 at ...memory address... thread T0
"babad" is size 5 and after going over this for an hour. I don't see the point where the iteration ever exceeds 5
There is 3 pointers here that iterate.
e as the element of string s.
n which is the pointer to the next char of output.
and c which is a copy of n and decrements until it reaches the address of &output[0].
maybe it's something with the memmove or memset since I've never used it before.
I'm completely lost
 
    