Какой самый простой способ вызвать сбой программы на C ++? - PullRequest
306 голосов
/ 13 декабря 2011

Я пытаюсь создать программу на Python, которая взаимодействует с другим аварийным процессом (это не в моих руках). К сожалению, программа, с которой я взаимодействую, даже не дает сбоя! Поэтому я хочу сделать быструю программу на C ++, которая намеренно зависает, но я не знаю, какой самый лучший и кратчайший способ сделать это, кто-нибудь знает, что можно поставить между моими:

int main() {
    crashyCodeGoesHere();
}

для надежного сбоя моей программы на C ++

Ответы [ 28 ]

2 голосов
/ 22 февраля 2015

Хотя на этот вопрос уже принят ответ ...

void main(){
    throw 1;
}

Или ... void main(){throw 1;}

2 голосов
/ 14 октября 2012
int main(int argc, char *argv[])
{
    char *buf=NULL;buf[0]=0;
    return 0;
}
1 голос
/ 27 сентября 2012

Или другой путь, так как мы находимся в группе.

Прекрасный кусок бесконечной рекурсии.Гарантированно взорвать ваш стек.

int main(int argv, char* argc)
{
   return main(argv, argc)
}

Распечатывает:

Ошибка сегментации (ядро сброшено)

0 голосов
/ 13 февраля 2016

Стильный способ сделать это - вызов чисто виртуальной функции:

class Base;

void func(Base*);

class Base
{
public:
   virtual void f() = 0;
   Base() 
   {
       func(this);
   }
};

class Derived : Base
{
   virtual void f()
   {
   }
};

void func(Base* p)
{
   p->f();
}


int main()
{
    Derived  d;
}

Скомпилировано с gcc, печатает:

чисто виртуальный метод под названием

завершить вызов без активного исключения

Прервано (ядро сброшено)

0 голосов
/ 08 февраля 2016
char*freeThis;
free(freeThis);

Освобождение неинициализированного указателя является неопределенным поведением. На многих платформах / компиляторах freeThis будет иметь случайное значение (независимо от того, что было в этом месте памяти раньше). При его освобождении система будет освобождать память по этому адресу, что обычно вызывает ошибку сегментации и приводит к сбою программы.

0 голосов
/ 17 сентября 2014
int main()
{
    int *p=3;
    int s;
    while(1) {
        s=*p;
        p++;
    }
}
0 голосов
/ 27 сентября 2012
void main()
{

  int *aNumber = (int*) malloc(sizeof(int));
  int j = 10;
  for(int i = 2; i <= j; ++i)
  {
      aNumber = (int*) realloc(aNumber, sizeof(int) * i);
      j += 10;
  }

}

Надеюсь, что это потерпит крах.Приветствия.

0 голосов
/ 13 декабря 2011

Тот, который еще не был упомянут:

((void(*)())0)();

Это будет рассматривать нулевой указатель как указатель на функцию, а затем вызывать его. Как и большинство методов, это не гарантирует сбой программы, но шансы ОС, позволяющей это не проверять, и программы, которая когда-либо возвращалась, незначительны.

...