Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bad permissions for mapped region [duplicate]

I get an error when trying to run the following function:

   char* reverseInPlace(char* src)
{
    //no need to alloc or free memory
    int i=0;
    int size=mystrlen(src);
    for(i=0;i<size;i++)
    {
        int j=size-i-1;

        if(i<j)
        {
            char temp;
            printf("Interchange start %d:%c with %d:%c",i,src[i],j,src[j]);
            temp=src[i];
            src[i]=src[j];//error occurs here
            src[j]=temp;
            printf("Interchange complete %d:%c and %d:%c",i,src[i],j,src[j]);
        }   
    }
    return src; 
}

I call this code like this:

char* rev2=reverseInPlace("BeforeSunrise");
printf("The reversed string is %s\n",rev2);

The error looks like this:

Interchange start 0:B with 12:e
Process terminating with default action of signal 11 (SIGSEGV)
Bad permissions for mapped region at address 0x401165

Why does this error occur?

like image 863
vamsiampolu Avatar asked Jan 27 '14 17:01

vamsiampolu


2 Answers

You are passing a constant string to your function.

String literals are of type char [N + 1] (where N is the length of the array) in C, but modifying them results in undefined behavior. Your compiler should have already issued a warning at that point.

If you wish to modify it then you have to create a copy:

char str[] = "BeforeSunrise";
char* rev2=reverseInPlace(str);
like image 130
Sergey L. Avatar answered Oct 18 '22 17:10

Sergey L.


It's because you try to modify a string literal, which is a constant array, i.e. it's read-only.

like image 36
Some programmer dude Avatar answered Oct 18 '22 17:10

Some programmer dude