Почему этот простой фрагмент кода 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 по умолчанию.
Не могу понять, что я делаю не так.
malloc
уже считается в основном плохой практикой в C++, но для инициализации вектора STL он вообще не будет работать. - person Zinki   schedule 20.12.2017malloc
? зачем все эти отливки? почему неstd::vector
? - person 463035818_is_not_a_number   schedule 20.12.2017