undefined-behavior

    5熱度

    2回答

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

    2熱度

    1回答

    關於this關於某個Winsock結構的頁面,這個例子看起來像是取了一個結構體的地址,並將結果指針轉換爲指向完全不同結構的指針。 SOCKET ListenSocket; struct sockaddr_in saServer; // Bind the listening socket using the information in the sockaddr structure bind(

    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;

    4熱度

    3回答

    我看了this很好太寬了問題,遇到一些UB我以前都不知道。 UB我不時看到的主要原因是在兩個序列點之間改變兩次變量。諸如:x = x++或z = y++ + ++y;。讀取在兩個序列點之間兩次更改變量是UB幫助我瞭解這些情況下的根本原因。 但是,像負位移位這樣的事情呢? (int x = 8 << -1)有沒有一個規則可以解釋或者我應該記住這是一個獨特的UB可能性? 我看了here和部分整數溢出我

    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]);