写了个简单的字符串反转函数,总出现0xC0000005: Access Violation有关问题,求大神指点

写了个简单的字符串反转函数,总出现0xC0000005: Access Violation问题,求大神指点
char *reverse_str(char *str)
{
char *ph=str;
char *pe=str;
while (*pe)
{
pe++;
}
pe--;

while(ph<pe)
{
char p=*ph;
*ph++=*pe;
*pe--=p;
}
return str;
}
c++ 字符串反转

------解决方案--------------------

char *reverse_str(char *str)

char*p=reverse_str("abcdefg");
或者 
px="abcdefg";
char*p=reverse_str(px);

这样的使用方式会有问题,程序数据区的数据是不允许改写

 
------解决方案--------------------
按你的程序 反转一半就够了吧?
另外访问冲突可以用 __try __except来捕捉
------解决方案--------------------
引用:
按你的程序 反转一半就够了吧?
另外访问冲突可以用 __try __except来捕捉

是的,全部反转等于不反转。
------解决方案--------------------
交换内存数据
//mem1和mem2按照_c为长度 互相交换内存数据
static void * _my_memxchg(void* mem1,void* mem2,size_t _c)
{
char tmp;
void *ret=mem1;
while(_c--)
{
       tmp=*(char*)mem1;
       *(char*)mem1=*(char*)mem2;
   *(char*) mem2=tmp;
   mem1=(char*)mem1+1;
   mem2=(char*)mem2+1;
}
return ret;
}