OCCI - setDataBuffer + vector <struct>

时间:2017-07-06 23:25:13

标签: c++ oracle occi

尝试通过将包含char缓冲区的结构存储到向量中来最小化OCCI数组获取的行数,代码如下:

1.5s

现在由于某种原因,这不起作用。但是,如果不是使用col.buffer,我创建一个char缓冲区[1000] [300]并将其放入setDataBuffer然后在cout部分中执行:     cout&lt;&lt; buffer [j]&lt;&lt; ENDL;

效果很好。所以我不确定我搞砸了哪里?

char缓冲区与col.buffer完全相同,不是吗?

我认为这不重要,但结构列在头文件中定义。

1 个答案:

答案 0 :(得分:1)

我想setDataBuffer填充你传递的缓冲区作为参数(这里是col.buffer),然后你将它推入向量,所以struct Columns分配了一个新的vec并复制col内容。现在colvec[0]是两个不同的对象。

然后你调用一些方法来填充你第一次传递给它的缓冲区。所以它填充col.buffer,你读vec[0].buffer,它们是不同的,因为它们是两个不同的对象。

一种解决方案是vec.emplace_back();创建一个实例,然后将vec[0].buffer传递给setDataBuffer。但要小心矢量中的元素地址。如果修改了向量(添加或删除元素),它可以重新分配它的内容,并且元素地址可能会改变。