Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Роняем компилятор, кто круче уронит? как пофиксить? 
:(
    Опции темы
akul
  Дата 26.11.2003, 17:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код


template<typename C> class X
{
public:
X();
};

template<typename C> X<C>::~X(){};



Студия 2003 падает на темплейтном деструкторе без прототипа.


    Microsoft ® 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
    Copyright © Microsoft Corporation 1984-2002. All rights reserved.

    test.cpp
    test.cpp(8) : fatal error C1001: INTERNAL COMPILER ERROR
    (compiler file 'msc1.cpp', line 2701)
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information

  Вверх
Sergusha
Дата 23.10.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.6.2006

Репутация: нет
Всего: нет



Люди, помогите если можете. При компиляции выдается сообщение о фатальной ошибке компилятора, как и в верхнем посте. Не могу понять в чем дело в MSDN этот объеснений, в гугле народ пишет про оптимизации, у меня они выключены.
Код следующий:

Код

#ifndef _QuicSort_H_
#define _QuickSort_H_

#include <time.h>

template <typename T>
class QuickSort {
private:
    T *ptr;
    int size, left, right;

public:
    QuickSort ( T* array, int n = 0);
    void SortRec ();
};

template <typename T>
QuickSort<T>::QuickSort ( T* array, int n)
{
    ptr = array;
    size = n;
    left = 0;
    right = size - 1;
}

template <typename T>
QuickSort<T>::SortRec()
{
    int ixLeft, ixRight;
    T temp;
    T element;
    
    
    element = ptr[left + rand () % (right - left) ];
    ixLeft = left;
    ixRight = right;

    while (ixLeft <= ixRight)
    {
        while ( ptr[ixLeft]<x) ixLeft++;
        while ( x < ptr[ixRight]) ixRight--;

        if (ixLeft<= ixRight)
        {
            temp = ptr[ixLeft];
            ptr[ixLeft]=ptr[ixRight];
            ptr[ixRight]=temp;
            ixLeft++;
            ixRight--;
        }
    }
    if (ixRight - left < right - ixLeft)
    {
        Split (ptr, size, left, ixRight);
        Split (ptr, size, ixLeft, right);
    }
    else
    {
        Split (ptr, size, ixLeft, right);
        Split (ptr, size, left, ixRight);
    }
}

#endif


вот вызов:
Код

#include <iostream>
#include "QuickSort.h"

using std::cout;
using std::endl;

int main ()
{
    const int iSize = 15;
    int ar[iSize] = { 3, 9, 25, 73, 32, 17, 11, 78, 99, 54, 34, 22, 66, 43, 1 };

    QuickSort<int> A (ar, iSize);
    A.SortRec ();


    return 0;
}



Студия версии 7.1

PM MAIL   Вверх
Palladin
Дата 23.10.2006, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: нет
Всего: 17



Sergusha, Я что-то не вижу связи твоего поста с названием топа, создавай новую тему и там задавай вопрос smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Earnest
Дата 23.10.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



INTERNAL COMPILER ERROR означает, что у компилятора съехала крыша, и он не может разрулить ситуацию. Приводить к этому могут самые разные ошибки. Искать, конечно, тяжело, учитывая диагностику, но это всегда ваша ошибка. В первом случае деструктор не объявлен в классе, что бессмысленно.
Во втором случае лень искать, код большой. Но есть беспроигрышный метод: частично комментируешь код и таким образом локадизуешь ошибку. 


--------------------
...
PM   Вверх
Daevaorn
Дата 23.10.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Sergusha @  23.10.2006,  03:03 Найти цитируемый пост)
#ifndef _QuicSort_H_
#define _QuickSort_H_

Что ты тут проверяешь?
Цитата(Sergusha @  23.10.2006,  03:03 Найти цитируемый пост)
template <typename T>
QuickSort<T>::SortRec()

Метод не возвращает ничего, даже void?
Цитата(Sergusha @  23.10.2006,  03:03 Найти цитируемый пост)
 while ( ptr[ixLeft]<x) ixLeft++;

Что за x? Откуда эта ппеременная?
Цитата(Sergusha @  23.10.2006,  03:03 Найти цитируемый пост)
   Split (ptr, size, left, ixRight);

А что такое Split?

А после этого у них компиляторы, видите ли, плохие...

Это сообщение отредактировал(а) Daevaorn - 23.10.2006, 09:04
PM MAIL WWW   Вверх
Empirik
Дата 23.10.2006, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 28.10.2005
Где: Россия, Пермь

Репутация: нет
Всего: 1



Цитата(akul @ 26.11.2003,  17:28)
Код


template<typename C> class X
{
public:
    X();
};

template<typename C> X<C>::~X(){};



 Студия 2003 падает на темплейтном деструкторе без прототипа.


    Microsoft ® 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
    Copyright © Microsoft Corporation 1984-2002. All rights reserved.

    test.cpp
    test.cpp(8) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 2701)
             Please choose the Technical Support command on the Visual C++
             Help menu, or open the Technical Support help file for more information



Господа либо я не выспался либо одно из двух. Но скажите мне пожалуйста как можно реализовывать тело деструктора, не описав его прототип в теле класса? Это первый вопрос? И второй вопрос, скажи пожалуйста, у тебя описание шаблонного класса и реализация его методов находиться в одном файле? 

Это сообщение отредактировал(а) Empirik - 23.10.2006, 08:55
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов
PM MAIL WWW ICQ   Вверх
Sergusha
Дата 23.10.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 14.6.2006

Репутация: нет
Всего: нет



Всем спасибо, не ожидал что народ так быстро откликнется. Сразу прошу прощения за то что задал вопросы по коду с явными ошибками. Писал просто все это ночью, запарился. С утра свежим глазом глянул сам ужаснулся. Ошибки нашел, все исправил все работает.
Цитата

Sergusha, Я что-то не вижу связи твоего поста с названием топа, создавай новую тему и там задавай вопрос smile 

Возможно ты и прав.
Daevaorn отдельное спасибо.
Цитата

Цитата(Sergusha @  23.10.2006,  03:03 Найти цитируемый пост)
#ifndef _QuicSort_H_
#define _QuickSort_H_

Что ты тут проверяешь?

Предотвращение  многократного включения заголовочного файла.
С остальным полностью согласен косяки. Просто тупо скопировал функцию в класс и даже не проверил smile 

Прошу сильно не ругаться

Это сообщение отредактировал(а) Sergusha - 23.10.2006, 10:14
PM MAIL   Вверх
maxim1000
Дата 23.10.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(Sergusha @  23.10.2006,  09:11 Найти цитируемый пост)
Предотвращение  многократного включения заголовочного файла.

а ещё раз:
Цитата(Sergusha @  23.10.2006,  09:11 Найти цитируемый пост)
#ifndef _QuicSort_H_
#define _QuickSort_H

 smile 


--------------------
qqq
PM WWW   Вверх
maksr
Дата 24.10.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lizard King
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 17.2.2005
Где: Нижний Новгород

Репутация: нет
Всего: 1



Код

struct STRUCT
{
}(*PSTRUCT);


fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'msc1.cpp', line 1392)
 To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++ 
 Help menu, or open the Technical Support help file for more information

 smile 
PM MAIL ICQ   Вверх
JackYF
Дата 24.10.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



GNU C++ на этом примере работает прекрасно.

P.S. У меня бывали internal error'ы в Borland C++ Builder 6 и Borlaтв С++ Builder 2006 Architect Preview, когда ни с того, ни с сего компилер выдавал внутреннюю ошибку, потом ставился пробел, он же удалялся, и все работало дальше прекрасно.  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nickless
Дата 24.10.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



У меня gcc 4.1.1 падает с сегфолтом если попытаться скомпилировать что нибудь одновременно с -O2 и -ftrapv


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
JackYF
Дата 24.10.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



nickless, это под разными проектами? Hello World компилит при таких опциях?
Если да, то код в студию...

P.S. Дабы далеко не лазить, что опция -ftrapv делает?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
bsa
Дата 25.10.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(JackYF @ 24.10.2006,  17:14)
P.S. Дабы далеко не лазить, что опция -ftrapv делает?

Код
       -ftrapv
           This option generates traps for signed overflow on addition, sub-
           traction, multiplication operations.

PM   Вверх
JackYF
Дата 25.10.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Странно, что компилятор допускает такую комбинацую настроек... smile




--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nickless
Дата 25.10.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(JackYF @ 24.10.2006,  16:14)
nickless, это под разными проектами? Hello World компилит при таких опциях?

Hello world компилит, код будет. 
В более сложном коде результат вариирует от ошибки в системной либе до сегфолта или out of memory.

Кстати что такого в этой комбинации? Почему бы не потестить на overflow в оптимированном коде?

EDIT: Урезанный код одного класса

Код

// LogFile.h //

#ifndef __LOGFILE__
#define __LOGFILE__


#include <sstream>
#include <bitset>


struct Position
{
    int x;
    int y;
    Position(int X, int Y) : x(X), y(Y) {};
};

class Output
{
    public:
        Output() : m_p_map(0) {};
        virtual ~Output() {};
        virtual void notify();
    
    protected:
        int *m_p_map;
};

class LogFile  : public Output
{
    public:
        LogFile();
        ~LogFile();
        
        virtual void notify();

    private:
        std::stringstream    m_buf;
        
        void print_header();
        void print_cell(Position pos);
        void print_marks(std::bitset<6> marks);
};


#endif // __LOGFILE__


Код

// LogFile.cpp //


#include "LogFile.h"

#include <iostream>
#include <iomanip>
#include <cassert>

using namespace std;


LogFile::LogFile()
    : Output::Output(), m_buf()
{
}

LogFile::~LogFile()
{
    cout << m_buf.str();
    cout.flush();
}


void  LogFile::notify()
{
    assert(m_p_map);
    m_buf.str("");
    print_header();
    
    int mx = 2, my = 2;
    for (int y=0; y < my; y++)
    {
        for (int x=0; x < mx; x++)
        {
            m_buf << right << setfill('0') << setw(7) << " ";
            print_cell(Position(x, y));
        }
    }
    cout << m_buf.str();
    cout.flush();
    m_buf.str("");
}


void LogFile::print_header()
{
    m_buf << "======= === === = ==== === === ===== ====          \n";
}


void LogFile::print_cell(Position pos)
{
    m_buf << right << setfill('0') << setw(3) << pos.x << " ";
    m_buf << right << setfill('0') << setw(3) << pos.y << " ";
}


void LogFile::print_marks(bitset<6> marks)
{
    if (!marks.any())
        return;
    for (int i=5; i>=0; i--)
    {
        if (marks.test(i))
            m_buf << i;
        else
            m_buf << '_';
    }
    m_buf << " ";
}


Вот что пишет gcc:
Код

$ g++ -O2 -ftrapv -pipe -c LogFile.cpp -o LogFile.o
g++: Internal error: Segmentation fault (program cc1plus)
Please submit a full bug report.
See <URL:http://bugs.gentoo.org/> for instructions.

$ g++ --version
g++ (GCC) 4.1.1 (Gentoo 4.1.1-r1)
Copyright (C) 2006 Free Software Foundation, Inc.


Люди, попробуйте у себя кому не лень, а то интересно, это gcc глючит или просто у меня версия такая корявая  smile  smile 

ЗЫ gcc 3.4.6 компилит без проблем

Это сообщение отредактировал(а) nickless - 25.10.2006, 18:51


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.