我的内存访问有问题。当为i = 0
时,Visual Studio参照以下代码中标记的行引发异常。
不能访问0x00AD8B3B
,并且0x00AD8B3B
等于scr+np-i
我该如何修复for循环主体以解决此问题?
int o_strrev(char* scr)
{
int np = strlen(scr) - 1;
char tmp;
if (!scr) return -1;
if (!*scr) return -1;
for (int i = 0; i < np / 2; i++)
{
tmp = scr[np-i];
scr[np-i] = scr[i]; # this line
scr[i] = tmp;
}
return 0;
}
最佳答案
正如@Revolver_Ocelot指出的那样,您可能正在从字符串文字中传递const char*
。根据定义,这些是常量,因此您无法按照自己的方式对其进行修改。您需要某种方式将const char*
转换为非常量char*
。这些方针将为您工作:
string str = "string";
char* cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
我已经使用非常量
char*
在g++中编译了您的代码,并且工作正常。只要记得在完成处理后释放char*
即可。我们不希望内存泄漏;)