为什么在多次调用时调用此函数会崩溃?

时间:2016-07-28 21:03:47

标签: c++ runtime-error

我对此代码感到有点困惑,我正在努力理解它崩溃的原因。

#include <iostream>
#include <vector>

std::string print_array_string(std::vector<std::string> ar) 
{ 
   std::cout << "Vector size:" << ar.size() << " values:";
   for(auto &i: ar) {
       std::cout << i << "; ";
   }
   std::cout << std::endl;
}


int main() {

   std::vector <std::string> ar {"ab", "cd", "ef"};

   print_array_string(ar);    
   print_array_string(ar);    

   return 0;
}

当这段代码运行时,我得到:

Array size:3 values:ab; cd; ef; 
*** Error in `/tmp/test': free(): invalid pointer: 0x00000000006040d8 ***
======= Backtrace: ========= 
/lib/x86_64-linux-gnu/libc.so.6(+0x77725)[0x7f8f7898c725]
/lib/x86_64-linux-gnu/libc.so.6(+0x7ff4a)[0x7f8f78994f4a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f8f78998abc]
/tmp/test[0x40115d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f8f78935830]
/tmp/test[0x400df9]
...

我不明白通话的影响是什么。 有人会开导我吗?

谢谢,

-daniel

1 个答案:

答案 0 :(得分:0)

AlexD在评论中解决了这个问题:

  

该函数应返回string但不返回   任何事情,未定义的行为。

(根据this meta post添加了此答案。)