Segmentation fault using a structure c++ and binary files

I have the next code, which use file in binary and the use of structure.

#include<iostream>
#include<fstream>
using namespace std;
struct Student {
   int roll_no;
   string name;
};
int main() {
   ofstream wf("student.dat", ios::out | ios::binary);
   if(!wf) {
      cout << "Cannot open file!" << endl;
      return 1;
   }
   Student wstu[3];
   wstu[0].roll_no = 1;
   wstu[0].name = "Ram";
   wstu[1].roll_no = 2;
   wstu[1].name = "Shyam";
   wstu[2].roll_no = 3;
   wstu[2].name = "Madhu";
   for(int i = 0; i < 3; i++)
      wf.write((char *) &wstu[i], sizeof(Student));
   wf.close();
   if(!wf.good()) {
      cout << "Error occurred at writing time!" << endl;
      return 1;
   }
   ifstream rf("student.dat", ios::in | ios::binary);
   if(!rf) {
      cout << "Cannot open file!" << endl;
      return 1;
   }
   Student rstu[3];
   for(int i = 0; i < 3; i++)
      rf.read((char *) &rstu[i], sizeof(Student));
   
   if(!rf.good()) {
      cout << "Error occurred at reading time!" << endl;
      return 1;
   }
   rf.close();
   cout<<"Student's Details:"<<endl;
   for(int i=0; i < 3; i++) {
      cout << "Roll No: " << wstu[i].roll_no << endl;
      cout << "Name: " << wstu[i].name << endl;
      cout << endl;
   }
   
   return 0;
}

I am getting a segmentation fault, running using the debugging, I have the next output:

....
Roll No: 3
45        cout << "Name: " << wstu[i].name << endl;
(gdb) s
Name: Madhu
46        cout << endl;
(gdb) s

43     for(int i=0; i < 3; i++) {
(gdb) s
49     return 0;
(gdb) s
33     Student rstu[3];
(gdb) s
Student::~Student (this=0x7fffffffd700, __in_chrg=<optimized out>) at f9.cpp:4
4   struct Student {
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff72d3c71 in free () from /lib/x86_64-linux-gnu/libc.so.6

Why I am getting this segmentation?, it is seems that the problem is with the destructor of my structure, at the same time, the error is in the line 4. Why?

Go to Source
Author: Kintaro Oe