2

有人可以给我一个程序中确定性错误的例子吗?

谢谢。

4

2 回答 2

2
void bug()
{
  int *ptr = 0;
  ptr[0] = 10;
}

访问空指针。总是发生。

于 2011-01-21T05:41:34.013 回答
1

这是一个确定性错误:

void myStrCpy (char *s, char *d) {
    for (int i = 0; i < strlen (s) - 1; i++)
        *d++ = s[i];
    *d = '\0';
}

它很明显忘记复制字符串的最后一个字符,这意味着副本少了一个字符。

对于带有赋值语句的人,您可以使用:

#include <stdio.h>
int main (void) {
    short x = 2094967295;
    printf ("%d\n", x);
    return 0;
}

输出-22017一致。

甚至是最近关于 SO 的问题的一小段:

int x = 2^5;   // set x to 32 for bitmasking later.

这是一个错误,尽管是用户错误。

甚至:

int *x = malloc (4);

在应该是可移植的应用程序中。

于 2011-01-21T05:56:26.720 回答