BUG is good
От: menify Россия  
Дата: 30.04.03 01:30
Оценка: 5 (2)
Немного странная просьба.

Мы занимаемся исследованием различных инструментов по статической проверке кода (C/C++) — QAC/C++, PC-lint, CodeWizard, CodeCheck и т.д.

Что-то типа этого.


Сейчас я пишу набор тестовых ситуаций содержащих типичные ошибки в коде.
например:

int main( void )
{
    int   arr[ 100 ];
    int   i;
    int   k;
    
    
    for (i = 0; i <= 100; ++i)          // переполнение массива
    {
        arr[ i ] = i;
    }
    
    if (i > 200)                    // невыполнимое условие
    {
        k = 99;
    }
    
    arr[ k ] = 0;                  // переменная k не определена
    
    return 0;
}


По этим ситуациям оценивается крутость инструмента (по кол-ву найденных ошибок).

Не поможете придумать небольшие примерчики с ошибками (особенно для C++), а то в голову мало что приходит?

Что-то типа этого, но это я взять не могу т.к. получится не обьективно


Большое спасибо.
Всего доброго.
Re: BUG is good
От: Artem2603 Россия  
Дата: 30.04.03 05:22
Оценка:
Здравствуйте, menify, Вы писали:

M>Не поможете придумать небольшие примерчики с ошибками (особенно для C++), а то в голову мало M>что приходит?



int* p;
p[10] = 10;

CSomeObject* pObject;
pObject->SomeMethod();

int Method()
{
   if(...)
   {
     return 0;
   }
}
Re[2]: BUG is good
От: menify Россия  
Дата: 30.04.03 05:37
Оценка:
Здравствуйте, Artem2603, Вы писали:


A>
A>int* p;
A>p[10] = 10;

A>CSomeObject* pObject;
A>pObject->SomeMethod();

A>int Method()
A>{
A>   if(...)
A>   {
A>     return 0;
A>   }
A>}
A>


Это C++?
Забыл сказать — код должен быть компилируемым. И только C/C++.
Всего доброго.
Re: BUG is good
От: menify Россия  
Дата: 30.04.03 05:40
Оценка: 4 (1)
Вот, увидел такой пример:

#include <iostream.h>

int sum = 0;

class Add
    {
  public:
    Add( int a, int b, int c )  { sum += a; Add x(b,c); }
    Add( int a, int b )         { sum += a; Add x(b); }
    Add( int a )                { sum += a; Add x(); }
    Add()                       { cout << sum; sum = 0; }
    };

int main()
    {
    Add x( 21, 15, 9 );
    return 0;
    }


Где тут баг, факт что он есть (т.е. на экран ничего не выводиться), но почему?
Всего доброго.
Re[2]: BUG is good
От: Сергей Зизев Украина  
Дата: 30.04.03 05:56
Оценка: 2 (1)
Здравствуйте, menify, Вы писали:

M>Вот, увидел такой пример:


M>
<...>
M>    Add( int a )                { sum += a; Add x(); }
<...>
M>


M>Где тут баг, факт что он есть (т.е. на экран ничего не выводиться), но почему?

Потому что,
Add x();

является не обьявлением обьекта x типа Add, а прототипом функции без параметров, которая возвращает Add.
Для того, что бы твой тест заработал достаточно убрать скобки:
Add x;
Re: BUG is good
От: Bell Россия  
Дата: 30.04.03 06:52
Оценка: 2 (1)
Здравствуйте, menify, Вы писали:


struct test
{
   int _n;
   explicit test(int n) : _n(n) {}
   test(const test& t) : _n(t._n) {}
   test& operator = (const test& t) { _n = t._n; }
};

int main(int argc, char** argv)
{
   
   bool bCondition = true;
   test t1(0);
   test& rt = bCondition ? t1: test(2);
   ++rt._n;
   cout << rt._n << endl;
   cout << t1._n << endl;

   return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[2]: BUG is good
От: Lorenzo_LAMAS  
Дата: 30.04.03 09:41
Оценка: 2 (1)
Тут и коде чекер ни к чему. В конструкторе с одним аргументом ты просто объявил функцию x с возвращаемым типом А и без параметров.
Of course, the code must be complete enough to compile and link.
Re: BUG is good
От: Denn  
Дата: 04.05.03 17:22
Оценка: 2 (1)
M> ... PC-lint


Аналог lint для виндов, да и просто развитием инструмента, занимается некая компания... Похоже, что ссылка именно на нее. Если это так, то у них на сайте ведется рубрика Bug of the day (или month)... (на который их lint, вроде как указывает). Собственно, просмотри ее и ее архив, попадаются весьма интересные примеры. (Если что не так, см. в google.com)

Например, запомнилась такая его возможность: он отслеживает случаи когда в списке инициализации конструктора программер опирается на порядок инициализации(конструирования) членов, да еще есть несоответствие порядка в списке и порядка объявления членов класса.. (Порядок инициализации гарантирован и в его использовании нет крамолы, но если не соблюсти соответствие порядков объявления и в списке инициализации, то легко накосячить и рассматриванием кода это трудно увидеть)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.