title: MPI_Scatter 2d vector
body: <p>I need to pass fragments of vector to all processes to make multiplication operation on  matrix . I want to pass a vector (of orginal_size/processes) of vectors. </p>
  
  <pre><code>    std::vector&lt;double&gt; Algorytm::mnozenie(std::vector&lt; std::vector &lt;double&gt; &gt;  matrix,std::vector&lt;double&gt; wektor){
          std::vector&lt;double&gt; wynik(matrix.size(),0);
         if (rozmiar_macierzy_==(int)wektor.size()){
             int size=matrix.size();
             int world_size;
             MPI_Comm_size(MPI_COMM_WORLD, &amp;world_size);
            MPI_Bcast(&amp;size,1 , MPI_INT,0,MPI_COMM_WORLD);
            MPI_Bcast(&amp;wektor.front(),wektor.size() , MPI_DOUBLE,0,MPI_COMM_WORLD);
  
            std::vector&lt; std::vector &lt;double&gt; &gt; fragment_of_matrix(matrix.size()/world_size);
            std::vector &lt;double&gt; tmp(size);
            for(int i=0;i&lt;fragment_of_matrix.size();i++){
              fragment_of_matrix.at(i)=tmp;
            }
            int small_size=matrix.size()*matrix.at(0).size()/world_size;
  
            std::vector&lt;double&gt; wektor2(wektor.size()/world_size);
           // This works
           MPI_Scatter(&amp;wektor.front(),wektor.size()/world_size , MPI_DOUBLE,&amp;wektor2.front(),wektor.size()/world_size , MPI_DOUBLE, 0,MPI_COMM_WORLD);
           //This doesn't :(
           MPI_Scatter(&amp;matrix.front(),small_size,  MPI_DOUBLE,&amp;fragment_of_matrix.front(), small_size,  MPI_DOUBLE, 0,MPI_COMM_WORLD);
  
  
       }
       else{
           std::cout &lt;&lt; "[ERROR]:"&lt;&lt;std::endl;
       }
       return wynik;
    }
  </code></pre>
  
  <p><code>MPI_Scatter(&amp;matrix.front() ...</code> causes error:</p>
  
  <pre><code>orrMPI(38789,0x7fff76af2000) malloc: *** error for object 0x3ff0000000000000: pointer being freed was not allocated
  *** set a breakpoint in malloc_error_break to debug
  [MBP-2:38789] *** Process received signal ***
  [MBP-2:38789] Signal: Abort trap: 6 (6)
  [MBP-2:38789] Signal code:  (0)
  [MBP-2:38789] [ 0] porrMPI(38788,0x7fff76af2000) malloc: *** error for object 0x7f8b618da200: pointer being freed was not allocated
  *** set a breakpoint in malloc_error_break to debug
  fragment_macierzy rozmiar: 75x150 0   libsystem_platform.dylib            0x00007fff8c29feaa _sigtramp + 26
  [MBP-2:38789] [ 1] 0   ???                                 0x0000000000000000 0x0 + 0
  [MBP-2:38789] [ 2] 0   libsystem_c.dylib                   0x00007fff975696e7 abort + 129
  [MBP-2:38789] [ 3] 0   libsystem_malloc.dylib              0x00007fff8e66c070 free + 425
  [MBP-2:38789] [ 4] 0   porrMPI                             0x0000000101e77bed _ZNSt3__113__vector_baseIdNS_9allocatorIdEEED2Ev + 509
  [MBP-2:38789] [ 5] 0   porrMPI                             0x0000000101e779e5 _ZNSt3__16vectorIdNS_9allocatorIdEEED2Ev + 21
  [MBP-2:38789] [ 6] 0   porrMPI                             0x0000000101e727b5 _ZNSt3__16vectorIdNS_9allocatorIdEEED1Ev + 21
  [MBP-2:38789] [ 7] 0   porrMPI                             0x0000000101e77d33 _ZNSt3__113__vector_baseINS_6vectorIdNS_9allocatorIdEEEENS2_IS4_EEED2Ev + 275
  [MBP-2:38789] [ 8] 0   porrMPI                             0x0000000101e77c15 _ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEED2Ev + 21
  [MBP-2:38789] [ 9] 0   porrMPI                             0x0000000101e727f5 _ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEED1Ev + 21
  [MBP-2:38788] *** Process received signal ***
  [MBP-2:38788] Signal: Abort trap: 6 (6)
  [MBP-2:38788] Signal code:  (0)
  [MBP-2:38788] [ 0] 0   libsystem_platform.dylib            0x00007fff8c29feaa _sigtramp + 26
  [MBP-2:38788] [ 1] 0   ???                                 0x0000ffff00001fa0 0x0 + 281470681751456
  [MBP-2:38788] [ 2] 0   libsystem_c.dylib                   0x00007fff975696e7 abort + 129
  [MBP-2:38788] [ 3] 0   libsystem_malloc.dylib              0x00007fff8e66c070 free + 425
  [MBP-2:38788] [ 4] 0   porrMPI                             0x000000010b4cdbed _ZNSt3__113__vector_baseIdNS_9allocatorIdEEED2Ev + 509
  [MBP-2:38788] [ 5] 0   porrMPI                             0x000000010b4cd9e5 _ZNSt3__16vectorIdNS_9allocatorIdEEED2Ev + 21
  [MBP-2:38788] [ 6] 0   porrMPI                             0x000000010b4c87b5 _ZNSt3__16vectorIdNS_9allocatorIdEEED1Ev + 21
  [MBP-2:38788] [ 7] 0   porrMPI                             0x000000010b4cdd33 _ZNSt3__113__vector_baseINS_6vectorIdNS_9allocatorIdEEEENS2_IS4_EEED2Ev + 275
  [MBP-2:38788] [ 8] 0   porrMPI                             0x000000010b4cdc15 _ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEED2Ev + 21
  [MBP-2:38788] [ 9] 0   porrMPI                             0x000000010b4c87f5 _ZNSt3__16vectorINS0_IdNS_9allocatorIdEEEENS1_IS3_EEED1Ev + 21
  [MBP-2:38788] [10] 0   porrMPI                             0x000000010b4d48d1 _ZN17AlgorytmCzebyszew19obliczMacierzRownanEv + 8289
  [MBP-2:38788] [11] 0   porrMPI                             0x000000010b4d7f78 main + 504
  [MBP-2:38788] [12] 0   libdyld.dylib                       0x00007fff976475ad start + 1
  [MBP-2:38788] [13] 0   ???                                 0x0000000000000001 0x0 + 1
  [MBP-2:38788] *** End of error message ***
  [MBP-2:38789] [10] 0   porrMPI                             0x0000000101e8235c _Z5slavev + 700
  [MBP-2:38789] [11] 0   porrMPI                             0x0000000101e81e54 main + 212
  [MBP-2:38789] [12] 0   libdyld.dylib                       0x00007fff976475ad start + 1
  [MBP-2:38789] [13] 0   ???                                 0x0000000000000001 0x0 + 1
  [MBP-2:38789] *** End of error message ***
  --------------------------------------------------------------------------
  mpiexec noticed that process rank 0 with PID 38788 on node MBP-2 exited on signal 6 (Abort trap: 6).
  </code></pre>
  
  <p>how to correctly pass chunks of this 2d vector to all processes?</p>