undefined-behavior

    0熱度

    2回答

    嚴格的別名讓我偏執。有時我用* int指針設置值,並且期望目標內存讀取相同的數據,而不管讀指針類型是什麼。嚴格的別名不能保證這一點,有時甚至會導致這種情況並非如此。 如果我在循環中讀取char [],並且在該char []數組中有一個* int chainging東西,我打破了其他標準C事物之間的別名規則。 我正在製作一個JIT編譯器,因爲我使用的是x86,所以我確信我不必關心int對齊。直到我們

    15熱度

    1回答

    爲什麼要將名稱添加到std命名空間未定義的行爲? 顯而易見的答案是「因爲標準如此」,例如在C++ 14 [namespace.std] 17.6.4.2.1/1: 一個C如果它增加了聲明或定義到命名空間std或命名空間std除非內的 命名空間++程序是未定義的行爲另有規定。 ... 但是,我會對這個裁決的真正原因感興趣。我當然可以理解,在std中添加名稱的重載可能會破壞行爲;但爲什麼要添加新的無關

    -4熱度

    1回答

    此代碼打印「等於」和「1 0」。 即使1 != 0發生這種情況,爲何會發生這種情況? if(2/2 == 2/2.0) printf("equal \n"); printf("%d %d", 2/2, 2/2.0);

    18熱度

    2回答

    我從來沒有見過[[ noreturn ]]之前用過無void返回函數。 以下定義清楚嗎? [[ noreturn ]] int function(); int function(){ while(true){/* impl */} return 0; } 返回類型必須是int究其原因,是因爲函數是通過一個函數指針傳遞給另一個函數。 因此,假設主叫看起來是這樣的: //

    3熱度

    1回答

    的UB消毒劑在哪裏使用已經安裝clang version 3.4 (tags/RELEASE_34/final)特拉維斯CI建成,我建立我的代碼以這樣的: clang++ main.cpp -m64 -fsanitize=undefined -Werror -std=c++98 -pedantic -pedantic-errors -fvisibility=hidden -fstrict-alia

    0熱度

    1回答

    當我的一位朋友解決在線評判問題時,我遇到了問題。 他撰寫案例1(例如)有一個撥錯的答案,有一個由案件受理2. int a[4]; a[ 2+6-5 ]; //undefined behavior? case 1 a[ 2+(6-5) ];//ok case 2 Accroding到C++的std§5.7.5 if a[ 2+6-5 ] == *(a + 2+6-5); //ub if a

    -4熱度

    1回答

    下面的代碼在Code :: Blocks上編譯和運行時顯示不同的結果。 void sum(int a,int b){ printf("a=%d b=%d\n",a,b); } int main(){ int i=1; sum(i=5,++i); printf("i=%d\n\n",i); /***********************/

    2熱度

    2回答

    #include <iostream> int main() { int *ptr = NULL; // It does not crash *ptr; --------> Point-1 //But this statment crashed std::cout<<"Null:"<<*ptr<<"\n"; ------> Point-2

    8熱度

    1回答

    由於每本書的C++編程語言(Bjarne的Stroustrup的),在第15.2.3(的一個定義規則)頁面沒有425,我寫如下程序: file1.cpp struct S2 { int a; char b; }; file2.cpp struct S2 { int a; char bb; }; int main(){ return 0;} 要編譯我試圖以下命令。 g++ -std=c++

    2熱度

    1回答

    假設我們有這個結構,其中包含4個元素的4個float值和一個float數組。 然後它是未定義的行爲還是不作爲Foo實例訪問數組並通過該實例更改數組元素? struct Foo { float a; float b; float c; float d; }; float values[4] = { 1.0f, 1.0f, 1.0f, 1.0f };