當您使用以下標誌進行編譯時,如果添加/ GF-或刪除opimization標誌,它們不會崩潰,下面的代碼在VS 2010中崩潰。崩潰發生在彙編代碼翻譯'if(path [i] =='/')'。我喜歡理解編譯器在這裏做的優化,並導致崩潰。期待一些提示。VS2010 C代碼 - 字符串池
-Karthik
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'中沒有''/''字符。你確定你在這裏展示的代碼是你正在運行的代碼的精確副本嗎? – 2016-03-03 20:17:00