I am currently refactoring an imperative C++ program that uses AVX2 primitives extensively to a well-structured class-based program. Unfortunately, I encounter an segfault when assigning to a class member with an AVX2 datatype.
I'm within WSL using:
gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
Compiling with flags:
g++ -mavx2 -g minimal.cpp
A minimal code sample to reproduce the segfault is:
#include <immintrin.h>
class MyClass
{
public:
MyClass(int* arr);
__m256i value;
};
MyClass::MyClass(int* arr){
this->value = _mm256_set_epi32(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]);
}
int main(){
int arr[8] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};
MyClass* m = new MyClass(arr);
}
GDB output:
Program received signal SIGSEGV, Segmentation fault.
0x00000000080007cf in MyClass::MyClass (this=0x8413e70, arr=0x7ffffffedd90) at minimal.cpp:11
11 this->value = _mm256_set_epi32(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]);
I already attempted assigning the class member after the constructor, same segfault.
Update: This is a related question, however it is not a duplicate.(Here: Focus on class members, relation to "new" only became apparent after initial question)