【发布时间】:2011-03-18 06:13:16
【问题描述】:
当您使用以下标志编译并且添加 /GF- 或删除优化标志时,VS 2010 中的以下代码崩溃,它们不会崩溃。崩溃发生在翻译'if(path [i] =='/')'的汇编代码中。我想了解编译器在这里所做的优化并导致崩溃。期待一些指点。
-卡提克
cl.exe /MD /O2 test.c
//Test.c
#include <stdio.h>
#include <string.h>
void testpath(char* path, int bufsiz)
{
int i;
printf("%p\n", path);
for( i=0; i < strlen(path); i++ ) {
if( path[i] == '/' ) {
path[i] = '\\';
}
}
}
int main()
{
const char* path = "testexport.prj";
char *path1 = "testexport.prj";
printf("%p\n", path);
printf("%p\n", path1);
testpath(path, 1024);
}
【问题讨论】:
-
你说这崩溃了。是否有任何其他信息说明它为什么崩溃?您显示的代码应该没有任何问题。正如您所说,条件应该阻止分配执行,因为您传递给函数的
path中没有'/'字符。您确定您在此处显示的代码是您正在运行的代码的精确副本吗?
标签: c++ c visual-studio visual-studio-2010 winapi