undefined-behavior

    5熱度

    2回答

    Code like this是未定義的行爲,因爲它訪問不在範圍內的局部變量(其生存期已結束)。 int main() { int *a; { int b = 42; a = &b; } printf("%d", *a); // UB! return 0; } 我的問題:是否有自動檢測這樣的錯誤的好技術?它似乎應該是可檢

    1熱度

    1回答

    我目前正在爲C++使用綠色線程使用工作竊取來實現多個硬件線程上的調度器之間的負載平衡。 我已將主環境固定到其硬件線程,這意味着它不會被盜,因此遷移到其他硬件線程。 我相信我已經讀過這個地方,如果主要上下文在哪裏被盜,並返回(退出)在不同的硬件線程中從它的起源地是未定義的行爲。但是,我現在似乎無法找到任何消息來源。 這是不確定的行爲?引用來源將是完美的。

    1熱度

    1回答

    我有一個類,其中我在一個特定的成員上過載了==運算符,memcmp()。由於在代碼中完成了錯誤的副本(調用memcpy的尺寸比應該更大),因此調用==運算符時出現段錯誤。 據我所知,UB很神祕,顯然沒有定義,但仍然有一些我注意到的讓我感興趣的東西。 在調試過程中,我將==調用與其實現交換(即a==b與memcmp(a.member_x, b.member_x, SIZE)交換)並且沒有段錯誤! 那

    -2熱度

    1回答

    一個抽象的問題:說我有節點的單鏈表: #node 1 #node 2 root->[data|next]->[data|next]->NULL 在C,根聲明: struct Node *root = NULL; 其中*根是節點指針'保存'地址「NULL」。 現在,讓我們說,我想刪除的最後一個節點鏈表,下面的代碼可以讓電腦做這樣的動作: //pop: pop removes last/

    3熱度

    2回答

    char* p = init(); p = foo(p); /* this one */ 功能foo原型: char* foo(char* p); 是否允許調用foo這樣呢,還是在未定義行爲類下跌呢?

    8熱度

    1回答

    這是我的理解是這樣的事情是好的: const int ci = 42; const int *cip = &ci; int *ip = (int *)cip; int j = *ip; 這個怎麼樣? const int ci = 42; const int *cip = &ci; const int **cipp = &cip; int **ipp = (int **)cipp;

    0熱度

    2回答

    我很難找到一個解決方案,這將允許我在捕獲一個潛在的初始化異常的同時保持對象的作用域爲main方法。 下面的僞代碼試圖最好地說明我的問題。 int main() { // Initialisation SomeObject * object; try { SomeObject obj; // Initialisation can cause an exce

    2熱度

    2回答

    當我多次運行時,以下代碼的輸出未定義。我想知道爲什麼輸出未定義,以及當我嘗試爲未知邊界數組賦值時會有什麼含義。 #include <stdio.h> int main() { int a[]= {}; int num_of_elements; int count = 0; printf("Enter the number of elements:\n

    -5熱度

    1回答

    當我在下一個代碼部分使用strtok時,我得到了分段錯誤核心轉儲。該代碼正在調試,但是當我運行它時,我得到了分段錯誤。我該如何解決它? struct{ char *name; void(*func)(void); }cmd[]={ {"read_cm",read_cm}, {"NA",NULL} }; int d; char *s="_\n"; char *token2;

    -3熱度

    1回答

    How dangerous is it to access an array out of bounds?這不會告訴存儲的值是多少。 當我嘗試打印出程序中顯示的數組大小元素時,它正在打印0。它會總是0或一些垃圾值。 方案 #include<stdio.h> int main() { int a[5] = {10}; printf("\n\ra[6] = %d",a[6]);