2011-01-21 2 views
2

Может ли кто-нибудь дать мне пример детерминированной ошибки в программе?Пример детерминированной ошибки

Спасибо.

+0

Детерминированные ошибки легко - они всегда случаются! Это недетерминированные, которые тяжелы (условия гонки и т. Д.). – Gabe

ответ

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

Доступ к нулевой указателю. Всегда бывает.

+0

Обратите внимание, однако, что результат доступа к нулевому указателю может меняться в зависимости от того, в какой системе работает программа ... –

+0

Это не детерминировано, так как поведение не определено. Это означает, что он может ничего не делать на одном прогоне, одновременно сворачивая вселенную на сингулярность на следующем. – paxdiablo

+0

Я ищу пример использования переменной назначения. – Lok

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

в приложении, которое, как предполагается, будет переносимым.

Смежные вопросы