title: A simple C++ shared memory program written on linux: segmentation fault
body: <pre><code>#include &lt;stdio.h&gt; 
  #include &lt;sys/shm.h&gt; 
  #include &lt;sys/stat.h&gt; 
  #include &lt;string&gt;
  #include &lt;vector&gt;
  #include &lt;iostream&gt;
  
  using namespace std;
  
  struct LOCK {
    string name;
    string type;
    vector &lt;string&gt; pids;
  };
  
  int main () 
  
  {
  
    int segment_id; 
  
    LOCK* shared_memory; 
  
    struct shmid_ds shmbuffer; 
  
    int segment_size; 
  
    const int shared_segment_size = 0x6400; 
  
  
  
    /* Allocate a shared memory segment.  */ 
  
    segment_id = shmget (IPC_PRIVATE, shared_segment_size, 
  
                       IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); 
  
    /* Attach the shared memory segment.  */ 
  
    shared_memory = (LOCK*) shmat (segment_id, 0, 0); 
  
    printf ("shared memory attached at address %p\n", shared_memory); 
  
    /* Determine the segment's size. */ 
  
    shmctl (segment_id, IPC_STAT, &amp;shmbuffer); 
  
    segment_size  =               shmbuffer.shm_segsz; 
  
    printf ("segment size: %d\n", segment_size); 
  
    /* Write a string to the shared memory segment.  */ 
  
    //sprintf (shared_memory, "Hello, world."); 
    shared_memory -&gt; name = "task 1";
    shared_memory -&gt; type = "read";
    (shared_memory -&gt; pids).push_back("12345");
    (shared_memory -&gt; pids).push_back("67890");
  
    /* Detach the shared memory segment.  */ 
  
    shmdt (shared_memory); 
  
  
  
    /* Reattach the shared memory segment, at a different address.  */ 
  
    shared_memory = (LOCK*) shmat (segment_id, (void*) 0x5000000, 0); 
  
    printf ("shared memory reattached at address %p\n", shared_memory); 
  
    /* Print out the string from shared memory.  */ 
  
    //printf ("%s\n", shared_memory -&gt; name); 
    cout &lt;&lt; "Name of the shared memory: " + shared_memory -&gt; name &lt;&lt; endl;
  
    /* Detach the shared memory segment.  */ 
  
    shmdt (shared_memory); 
  
  
  
    /* Deallocate the shared memory segment.  */ 
  
    shmctl (segment_id, IPC_RMID, 0); 
  
  
  
    return 0; 
  
  } 
  </code></pre>
  
  <p>I got the code from a tutorial on shared memory. It worked until I defined struct LOCK and tried to write LOCKs instead of char* into the shared memory.</p>
  
  <p>Could someone please help me figure out the problem here that causes the segmentation fault?</p>