С++ std::sort ошибка компилятора Intel: нарушение прав доступа

Почему этот простой фрагмент кода C++ не компилируется?

#include <algorithm>
#define SIZE (1000)

struct S {
   int *vect;
};

int main() {

    struct S* s = static_cast<struct S*>(malloc(sizeof(struct S)));

    s->vect = static_cast<int*>(malloc(sizeof(int) * SIZE));

    for(int i = 0; i < SIZE; i++) {
       s->vect[i] = i;
    }

    std::sort(s->vect, s->vect + SIZE);

}

Компилятор возвращает следующую ошибку, связанную с вызовом std::sort

1>C:\Program Files (x86)\Microsoft Visual 
Studio\2017\Enterprise\VC\Tools\MSVC\14.12.25827\include\algorithm(3138): 
error : access violation
1>              return (pair<_RanIt, _RanIt>(_Pfirst, _Plast));
1>                      ^

Я использую Visual Studio Enterprise 2017 версии 15.5.2 и 64-битный компилятор Intel версии 17.0.4.210 Build 20170411.

Код успешно скомпилирован с использованием компилятора Visual Studio по умолчанию.

Не могу понять, что я делаю не так.


person acco93    schedule 20.12.2017    source источник
comment
вы можете посмотреть, как инициализировать структуры данных в C++. malloc уже считается в основном плохой практикой в ​​C++, но для инициализации вектора STL он вообще не будет работать.   -  person Zinki    schedule 20.12.2017
comment
@Zinki нет вектора STL (но, вероятно, он должен быть)   -  person 463035818_is_not_a_number    schedule 20.12.2017
comment
что ты хочешь делать? Почему вы используете malloc? зачем все эти отливки? почему не std::vector ?   -  person 463035818_is_not_a_number    schedule 20.12.2017
comment
Несмотря на использование malloc и т. д., код выглядит как правильный C++.   -  person juanchopanza    schedule 20.12.2017
comment
Я согласен, что код выглядит корректно, хотя и немного странно. У меня он также работает нормально, поэтому ошибка должна быть связана с компилятором Intel. @acco93 acco93, вы должны добавить к своему вопросу тег компилятора Intel.   -  person TheSHEEEP    schedule 20.12.2017
comment
работает здесь: ideone.com/doJBeA   -  person 463035818_is_not_a_number    schedule 20.12.2017
comment
Раньше у меня тоже бегал. После последнего обновления Visual Studio (версия указана в вопросе) и при компиляции с помощью компилятора Intel он внезапно возвращает эту странную ошибку. Я добавил тег Intel, к сожалению, у меня недостаточно репутации для создания тега компилятора Intel. Может быть, кто-то еще мог.   -  person acco93    schedule 20.12.2017
comment
@acco93 acco93 Мне тег icc кажется даже более подходящим, чем тег intel.   -  person TobiMcNamobi    schedule 20.12.2017
comment
Вы правы спасибо.   -  person acco93    schedule 20.12.2017


Ответы (1)


Я обнаружил, что, к сожалению, обновление Visual Studio 15.5.x нарушает работу Intel Compiler 2017, что можно увидеть в форум Intel, где я задал тот же вопрос. Надеюсь, это будет полезно и другим.

person acco93    schedule 22.12.2017