gpt4 book ai didi

c++ - 如何制作存储在数组中的STL对象的拷贝?

转载 作者:行者123 更新时间:2023-12-01 15:06:41 25 4
gpt4 key购买 nike

关于STL对象和数组,我显然不了解。任何时候(2次)我都会尝试将其存储在一个数组中,然后再将其取回,这会导致严重错误。单个对象的相同代码可以正常工作。

 void other(){
std::stringstream* streams[4];
for(int i = 0; i < 4; i ++){
streams[0] << "";
}
}


test2.cc:153:16: error: invalid operands of types 'std::stringstream* {aka std::__cxx11::basic_stringstream<char>*}' and 'const char [1]' to binary 'operator<<'
streams[0] << "";

另一个例子。使队列数组检索每个队列的副本:
void debug(int num_workers, std::queue<int>* stuff){
for(int i = 0; i < num_workers; i++){
std::queue<int> q = stuff[i];
printf("i:%d s:%d\n", i, stuff[i].size());
}
}
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
[2b7f97b93db8:07030] *** Process received signal ***
[2b7f97b93db8:07030] Signal: Aborted (6)
[2b7f97b93db8:07030] Signal code: (-6)
[2b7f97b93db8:07030] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x12890)[0x7fa2b1040890]
[2b7f97b93db8:07030] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0xc7)[0x7fa2b0c7be97]
[2b7f97b93db8:07030] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x141)[0x7fa2b0c7d801]
[2b7f97b93db8:07030] [ 3] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x8c957)[0x7fa2b14f1957]
[2b7f97b93db8:07030] [ 4] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x92ab6)[0x7fa2b14f7ab6]
[2b7f97b93db8:07030] [ 5] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x92af1)[0x7fa2b14f7af1]
[2b7f97b93db8:07030] [ 6] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x92d24)[0x7fa2b14f7d24]
[2b7f97b93db8:07030] [ 7] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0x9329c)[0x7fa2b14f829c]
[2b7f97b93db8:07030] [ 8] tst(+0x71fe)[0x5579e1a411fe]
[2b7f97b93db8:07030] [ 9] tst(+0x6986)[0x5579e1a40986]
[2b7f97b93db8:07030] [10] tst(+0x5b2e)[0x5579e1a3fb2e]
[2b7f97b93db8:07030] [11] tst(+0x4bf2)[0x5579e1a3ebf2]
[2b7f97b93db8:07030] [12] tst(+0x3f81)[0x5579e1a3df81]
[2b7f97b93db8:07030] [13] tst(+0x36f7)[0x5579e1a3d6f7]
[2b7f97b93db8:07030] [14] tst(+0x33b7)[0x5579e1a3d3b7]
[2b7f97b93db8:07030] [15] tst(+0x1fef)[0x5579e1a3bfef]
[2b7f97b93db8:07030] [16] tst(+0x2738)[0x5579e1a3c738]
[2b7f97b93db8:07030] [17] tst(+0x28a5)[0x5579e1a3c8a5]
[2b7f97b93db8:07030] [18] tst(+0x2fa9)[0x5579e1a3cfa9]
[2b7f97b93db8:07030] [19] tst(+0x482f)[0x5579e1a3e82f]
[2b7f97b93db8:07030] [20] tst(+0x3bbc)[0x5579e1a3dbbc]
[2b7f97b93db8:07030] [21] tst(+0x7f98)[0x5579e1a41f98]
[2b7f97b93db8:07030] [22] tst(+0x7f54)[0x5579e1a41f54]
[2b7f97b93db8:07030] [23] tst(+0x7f24)[0x5579e1a41f24]
[2b7f97b93db8:07030] [24] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xbd66f)[0x7fa2b152266f]
[2b7f97b93db8:07030] [25] /lib/x86_64-linux-gnu/libpthread.so.0(+0x76db)[0x7fa2b10356db]
[2b7f97b93db8:07030] [26] /lib/x86_64-linux-gnu/libc.so.6(clone+0x3f)[0x7fa2b0d5e88f]
[2b7f97b93db8:07030] *** End of error message ***
--------------------------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that process rank 7 with PID 0 on node 2b7f97b93db8 exited on signal 6 (Aborted).
--------------------------------------------------------------------------

最佳答案

您没有声明std::stringstream数组,而是声明了一个指向std::stringstream的指针数组。既没有使它们指向任何有用的东西,也没有在使用它们时取消引用它们。在以下情况下,您的代码应该可以正常工作:

std::stringstream* streams[4];

更改为:
std::stringstream streams[4];

在第二个示例中,引发了 std::bad_alloc,指示分配内存失败。这里的代码看起来不错(假设您传递了有效的参数),但是很可能您有其他代码填充或破坏了您的堆,并且/或者您将垃圾指针传递给了该函数(在初始化时您并不十分小心)数组和指针,并且最终总是会咬住你),只有在请求另一个分配并且一切都崩溃时,才会注意到它。

关于c++ - 如何制作存储在数组中的STL对象的拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59780055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com