2017-12-20 26 views
0

なぜこの単純なC++コードスニペットはコンパイルされませんか?C++ std :: sort intelコンパイラエラー:アクセス違反

#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に関連する以下のエラーを返します::ソート私はVisual Studioのエンタープライズ2017年バージョン15.5.2およびインテルコンパイラー64ビットバージョン17.0.4.210を使用してい

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>     ^

を呼び出しますビルド20170411.

コードは、デフォルトのビジュアルスタジオコンパイラを使用して正常にコンパイルされました。

私が間違っていることが分かりません。

+0

C++でデータ構造体を初期化する方法を見てみたいかもしれません。 'malloc'はすでにC++ではほとんど悪い習慣とみなされていますが、STLベクタを初期化するためにはまったく動作しません。 – Zinki

+0

@Zinki STLベクターはありません(ただし、おそらく1つあります) – user463035818

+3

何をしたいですか?なぜあなたは 'malloc'を使っていますか?なぜそれらすべてのキャスト?なぜ 'std :: vector'ではないのですか? – user463035818

答えて

0

残念ながら、私がこの同じ質問をしたintel forumに見られるように、残念なことにビジュアルスタジオのアップデート15.5.xがインテルコンパイラ2017を壊していることがわかりました。それが他の人にも役立つことを願っています。

関連する問題