none
VS2010 C++ Internal compiler error c1001 RRS feed

  • Вопрос

  • Куда правильно сообщить об ошибке?

    а то на https://connect.microsoft.com/VisualStudio/feedback/details/777151 послали.

    ________________

    this code causes fatal error C1001: Internal compiler error
    (file f:\dd\vctools\compiler\utc\src\P2\ehexcept.c, line 971)

    Only x32 compiler. VS2010, VS2005.
    ________
    int APIENTRY _tWinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
    {
    char *p = (char *)50000;
    try {
         *p = 10;
    } catch(char *) {
         catch(...) { }
    }
    return 0;
    }

    23 января 2013 г. 8:47

Ответы

  • Привет

    На Visual Studio 2012 - такая же ошибка, что на x86, что на x64. И по-моему здесь ошибка в коде у вас, а не компилятора.

    Если вы хотите обработать возникающее исключение внутри первого catch - то вам нужно добавить блок try, иначе ничего не выйдет. catch сам по себе не может быть, и не может быть вложенным так, как вы пишите:

    int main(int argc, _TCHAR* argv[])
    {
    	char *p = (char *)50000;
    	try 
    	{
              *p = 10;
    	}
    	catch(char *) 
    	{
    	  try
    	  {		  //
    	  }
              catch(...) 
    	  {
    	  }
    	}
    	return 0;
    }

    Если нужно обработать несколько разных ошибок, то располагайте блок catch последовательно:

    int main(int argc, _TCHAR* argv[])
    {
    	char *p = (char *)50000;
    	try 
    	{
              *p = 10;
    	}
    	catch(char *) 
    	{ 
    	}
    	catch(...) 
    	{
            }
    	return 0;
    }


    Для связи [mail]



    • Изменено Abolmasov Dmitry 24 января 2013 г. 9:28
    • Помечено в качестве ответа Abolmasov Dmitry 25 января 2013 г. 12:21
    24 января 2013 г. 9:27
  • Спасибо за компиляцию.

    Да, я понимаю, что код неверный. Должен быть syntax error, а не internal compiler error.

    (код получился в результате неверного использования макросов TRY/CATCH из MFC)

    • Помечено в качестве ответа Abolmasov Dmitry 25 января 2013 г. 12:21
    24 января 2013 г. 9:41

Все ответы

  • Конечно, внутренняя ошибка компилятора это не хорошо. Тем не менее, правильно послали с таким кодом.

    char *p = (char *)50000;
    *p = 10;

    Запись значения хрен знает куда. Компилятор распознает неправильный код, и от возмущения отказывается работать...

    23 января 2013 г. 9:57
  • Суть - во вложенном catch.

    *p здесь для примера.

    (и не "хрен знает куда", а в защищенные первые 64К)

    ___

    Если у кого установлен 2012, скомпилите, плиз.


    • Изменено Ivan34_NA 23 января 2013 г. 10:10
    23 января 2013 г. 10:09
  • Привет

    На Visual Studio 2012 - такая же ошибка, что на x86, что на x64. И по-моему здесь ошибка в коде у вас, а не компилятора.

    Если вы хотите обработать возникающее исключение внутри первого catch - то вам нужно добавить блок try, иначе ничего не выйдет. catch сам по себе не может быть, и не может быть вложенным так, как вы пишите:

    int main(int argc, _TCHAR* argv[])
    {
    	char *p = (char *)50000;
    	try 
    	{
              *p = 10;
    	}
    	catch(char *) 
    	{
    	  try
    	  {		  //
    	  }
              catch(...) 
    	  {
    	  }
    	}
    	return 0;
    }

    Если нужно обработать несколько разных ошибок, то располагайте блок catch последовательно:

    int main(int argc, _TCHAR* argv[])
    {
    	char *p = (char *)50000;
    	try 
    	{
              *p = 10;
    	}
    	catch(char *) 
    	{ 
    	}
    	catch(...) 
    	{
            }
    	return 0;
    }


    Для связи [mail]



    • Изменено Abolmasov Dmitry 24 января 2013 г. 9:28
    • Помечено в качестве ответа Abolmasov Dmitry 25 января 2013 г. 12:21
    24 января 2013 г. 9:27
  • Спасибо за компиляцию.

    Да, я понимаю, что код неверный. Должен быть syntax error, а не internal compiler error.

    (код получился в результате неверного использования макросов TRY/CATCH из MFC)

    • Помечено в качестве ответа Abolmasov Dmitry 25 января 2013 г. 12:21
    24 января 2013 г. 9:41
  • fatal error C1001: Internal compiler error в любом случае означает, что ошибка в коде компилятора, потому что он падает. Код примера, конечно, некорректный, но поведение компилятора это не оправдывает. Он должен выдать ошибку или предупреждение, а вместо этого вылетает сам.

    • Предложено в качестве ответа user823 18 ноября 2013 г. 5:15
    13 ноября 2013 г. 13:39