关于多线程编程 glibc detected double free or corruption,该怎么解决

关于多线程编程 glibc detected double free or corruption
我写了个程序,里面用到openmp生成多线程, 我把多线程去掉,就不会报错, 一旦我把多线程加上去,它就会报如下错误

*** glibc detected *** ./MPOTU3: double free or corruption (top): 0xb5e004b8 ***
======= Backtrace: =========
/lib/libc.so.6[0x363595]
/lib/libc.so.6(cfree+0x59)[0x3639d9]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x66e581]
/usr/lib/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1d)[0x64b14d]
/usr/lib/libstdc++.so.6(_ZNSs9_M_mutateEjjj+0x1b5)[0x64cf75]
/usr/lib/libstdc++.so.6(_ZNSs12_M_leak_hardEv+0x61)[0x64d9a1]
/usr/lib/libstdc++.so.6(_ZNSsixEj+0x31)[0x64da71]
./MPOTU3[0x804db4a]
/usr/lib/libgomp.so.1[0x16f23c]
/lib/libpthread.so.0[0x2e85ab]
/lib/libc.so.6(clone+0x5e)[0x3cbcfe]
======= Memory map: ========
00149000-00163000 r-xp 00000000 08:01 168692103 /lib/ld-2.5.so
00163000-00164000 r--p 00019000 08:01 168692103 /lib/ld-2.5.so
00164000-00165000 rw-p 0001a000 08:01 168692103 /lib/ld-2.5.so
00167000-00174000 r-xp 00000000 08:01 125846106 /usr/lib/libgomp.so.1.0.0
00174000-00175000 rw-p 0000c000 08:01 125846106 /usr/lib/libgomp.so.1.0


基本定位后发现,应该是加了多线程后出错, 部分源码

string sseq = getseq(*cu);
  long vsize = tvector.size();
  mis.resize(vsize);
  #pragma omp parallel for num_threads(4)
  for(long i=0; i < vsize; i++)
  {
  string qseq = tvector[i].first;
  int Mismatch = 0;
  int len = qseq.size() > sseq.size() ? qseq.size() : sseq.size();
  for(int j = 0; j < len; j++)
  {
  if(qseq[j] != sseq[j])
  {
  Mismatch++;
  }
  if(Mismatch > diffr)
  {
  Mismatch = qseq.size();
  }
  }

  mis[i] = Mismatch;

  }
大虾多多帮忙, 谢谢

------解决方案--------------------
vsize有多大?
可能是栈溢出,尝试增加栈或者设置openmp stack环境变量
------解决方案--------------------
多线程有没有共享什么数据?
一个错误像是指针被多次free。可能你两个线程里都把指针free。
另一个Segmentation fault,也有可能是一个线程把资源释放了,另一个线程又去访问导致的