首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在opt而不是debug中编译时,指向对象的指针为空

在opt而不是debug中编译时,指向对象的指针为空
EN

Stack Overflow用户
提问于 2013-01-14 22:13:22
回答 2查看 96关注 0票数 2

我正在写一段C++代码,并用gcc 4.7.1编译它。我正在编写一段代码,使用表达式模板来组装矩阵和向量,它们的类型是Trilinos中的MatrixEpetraVectorEpetra

我的问题如下:代码应该使用我定义的表达式组装一个向量(对于有限元问题),并将值放在我给他的向量中。使用boost::shared_ptr将向量提供给组装方法。当我在调试模式下编译代码时,代码运行得非常好,但是当我使用opt模式编译时,向量根本不会被填充。可能的问题是什么?

我知道我没有张贴代码片段,但这只是因为我不知道我应该在这里使用哪个级别的细节…我的意思是,我会张贴很多行,这可能是不合适的。

EN

回答 2

Stack Overflow用户

发布于 2013-01-14 22:23:04

在没有更多代码的情况下,我的心理调试技能告诉我,您没有使用resizepush_back来增加向量的大小,而只是使用operator[]将项添加到保留内存中。

票数 2
EN

Stack Overflow用户

发布于 2013-01-15 02:16:26

代码如下:

代码语言:javascript
复制
      integrate( integrationOverSelectedVolumes( this->M_FESpace->mesh(), this->M_markerFunctorPtr ) ,
                 this->M_FESpace->qr(),
                 this->M_ETFESpace,
                 value(bulk / 2.0) * ( pow( J ,2.0) - J + log(J)) * dot(  F_T, grad(phi_i) )
                ) >> M_stiff;

其中M_stiff是指向VectorEpetra的boost::shared指针,第四行是我需要计算和集成的表达式。函数integrate (这是一个名为IntegrateVectorVolumeID的类的构造函数)的第一个参数解释了必须在何处集成表达式。请注意,我已经用另一种类型的集成策略替换了integrationOverSelectedVolumes() (我认为它不起作用),并且我得到了相同的行为,所以问题不会出现在购买那个策略上。M_stiff就是我所说的指针。我不认为(但我可能错了)我忘记了初始化,因为在类的setup方法中,我重置了指向该类型的对象的所有指针。一旦我想出一个例子(这对我来说并不容易,因为我是表达式模板的新手,我仍然有很多疑问),我就会把它贴出来。

谢谢,波尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14320103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档