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