我目前正試圖包裝一個std :: ostringstream到和std :: unique_ptr。 我目前的代碼編譯,但在運行時,我得到分段錯誤。奇怪的行爲與std :: unique_ptr和std :: ostringstream(SIGSEGV)
當我不包裝它 - 使用舊的c樣式指針,它運行良好。
有關更詳細的概述,我正在使用curlpp將數據下載到ostringstream中。
這是我在做什麼:
std::unique_ptr<std::ostringstream> data_stream;
curlpp::Cleanup myCleanup;
*data_stream << curlpp::options::Url(this->m_ressource_url);
段故障發生在最後一行,這是回溯:
0x00007ffff790e2ce in std::ostream::sentry::sentry(std::ostream&)() from /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libstdc++.so.6
(gdb) bt
#0 0x00007ffff790e2ce in std::ostream::sentry::sentry(std::ostream&)() from /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libstdc++.so.6
#1 0x00007ffff790e3f7 in std::ostream::write(char const*, long)() from /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/libstdc++.so.6
#2 0x0000000000429be6 in curlpp::internal::Callbacks::StreamWriteCallback (buffer=0x660d1b "Das ist (k)ein Test.", size=1, nitems=20, stream=0x0)
at OptionSetter.cpp:55
#3 0x00007ffff7b90678 in ??() from /usr/lib64/libcurl.so.4
#4 0x00007ffff7ba4d38 in ??() from /usr/lib64/libcurl.so.4
#5 0x00007ffff7bac967 in ??() from /usr/lib64/libcurl.so.4
#6 0x00007ffff7bad5e5 in curl_multi_perform() from /usr/lib64/libcurl.so.4
#7 0x00007ffff7ba5dd6 in curl_easy_perform() from /usr/lib64/libcurl.so.4
#8 0x0000000000425a78 in curlpp::internal::CurlHandle::perform (this=0x6690b0) at CurlHandle.cpp:52
#9 0x0000000000424fca in curlpp::Easy::perform (this=0x7fffffffd5c0) at Easy.cpp:48
#10 0x00000000004252ba in operator<< (stream=..., request=...) at Easy.cpp:116
#11 0x0000000000424d7f in operator<< (stream=..., url=...) at Options.cpp:34
#12 0x0000000000420bb1 in Model<std::string>::m_download (this=0x7fffffffd878)
at /home/bueddl/Developement/Studium/Semester 4/SWT/Source/model/src/Model.hpp:98
#13 0x0000000000420a4e in Model<std::string>::refresh (this=0x7fffffffd878)
at /home/bueddl/Developement/Studium/Semester 4/SWT/Source/model/src/Model.hpp:71
#14 0x00000000004206a5 in main() at /home/bueddl/Developement/Studium/Semester 4/SWT/Source/model/src/main.cpp:56
僅供參考,我的文件是從#14至#12 ,上面的代碼是文件#12的一部分。現在
,這是奇怪的,當我寫休耕代碼,它的工作原理沒有問題:
std::ostringstream *data_stream = new std::ostringstream();
curlpp::Cleanup myCleanup;
*data_stream << curlpp::options::Url(this->m_ressource_url);
這兩種情況都傳遞指針操作< <,但我似乎是錯誤的。
我在哪裏錯了?
感謝您的幫助:)
注:我想用執行源庫模式的unique_ptr。
呃...'data_stream'持有'NULL'指針。只是創建一個'unique_ptr'的實例本身不會創建一個'T'的實例來保存它。 –