Debug版本和Release版本区别---C++中的常量字符串 

看下面代码:

 

char g_array[] = "abcd";
const char * g_pString = "abcd";

int main( int argc, char *argv[ ], char *envp[ ] )

{

     g_array[0] = 'f';
     ((char *)g_pString)[0] = 'f';

     return 0;

}

 

运行一下,会在 ((char*)g_pString)[0] = 'f'; 处产生异常,因此对于常量字符串,编译器不仅会在编译时作语

法上 的检查 还会自动为const声明的字符串所在的 内存块设置”只读“保护。

 

再看以下代码:

char * g_pString = "abcd";

int main( int argc, char *argv[ ], char *envp[ ] )

{
     g_pString[0] = 'f';

     return 0;

}

你会发现在 g_pString[0] = 'f'; 处也会产生异常,因为这种方式字符串被声明为常量字符串,编译器一样会

设置”只读“保护。

 

补充
2008-5-29
编译器仅在debug版本会放置于只读数据段(.rdata),对于Release版本,放置于可写数据段(.data),因此Release版本下改写这些数据不会出现异常。(未验证过这句话  ant~comment)

你可能感兴趣的:(Debug版本和Release版本区别---C++中的常量字符串 )