I just want you to ask what did I do wrong with this code. I wrote a function that take a char* in parameter, I want to modify it directly without returning smthg, and reverse the string.
#include <iostream>
void reverseString(char *p_string){
    int length = strlen(p_string);
    int r_it = length - 1;
    char* tmp = (char*)malloc(length);
    int last_it = 0;
    for (int i = 0; i != length; i++){
        tmp[i] = p_string[r_it];
        r_it--;
        last_it++;
    }
    tmp[last_it] = '\0';
    strcpy_s(p_string, length + 1, tmp);
    //free(tmp);
}
int main(){
    char str[] = "StackOverflow";
    reverseString(str);
    std::cout << str << std::endl;
    system("pause");
}
I'm used to C++ and don't often use C functions like malloc/free/strcpy... Here, my problem is, when I alloc memory for my temporary char, I called mallec(length) for length = 13 in this case, char = 1 bytes so it should be allocate memory for 13 char is that right?
Problem is allocate more space than need so i need to use '\0' before my strcpy_s if not it breaks.
Did I do a mistake somewhere? Also, when i call free(tmp), it breaks too and say heap corruption, but I didn't free the memory before that.
Thanks for helping !
 
     
     
     
     
    