c ++新手在这里.
在过去的几天里,我一直在提高我的记忆管理技能,根据valgrind,我的程序不再泄漏内存.事实上,我根本没有得到valgrind的警告.
但是,当我在我的代码中添加openmp循环时,我开始在valgrind(memcheck)中得到以下错误:(但没有明确丢失的块)
==6417== 304 bytes in 1 blocks are possibly lost in loss record 3 of 4
==6417== at 0x4C279FC: calloc (vg_replace_malloc.c:467)
==6417== by 0x4011868: _dl_allocate_tls (dl-tls.c:300)
==6417== by 0x6649871: pthread_create@@GLIBC_2.2.5 (allocatestack.c:570)
==6417== by 0x62263DF: ??? (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==6417== by 0x42A2BB: Blade::updatePanels() (blade.cpp:187)
==6417== by 0x418677: VLMsolver::initialiseBlade() (vlmsolver.cpp:590)
==6417== by 0x415A1B: VLMsolver::start(std::string) (vlmsolver.cpp:80)
==6417== by 0x40B28C: main (charybdis.cpp:176)
Run Code Online (Sandbox Code Playgroud)
和:
==6417== 1,568 bytes in 1 blocks are still reachable in loss record 4 of 4
==6417== at 0x4C28FAC: malloc …Run Code Online (Sandbox Code Playgroud) 如附带的屏幕截图所示,matlab的EPS输出是在右侧Y轴上切割标签.
我正在使用plotyy函数,并使用:print(f1,' - depsc2','figure1.eps')打印到eps;
我已经尝试更改paperposition属性,以及papersize属性,这些似乎在每次调整时都与另一个进行缩放,因此我永远无法在右侧增加纸张大小.
我已将paperpositionmode设置为手动.
有没有人有任何想法?
我已经创建了一些自给自足的示例代码并复制了问题.增加刻度和字体大小时会产生问题.然而,这对我的情况至关重要.
close all;
% example data:
x = 0:0.01:4;
y1 = 5*sin(2*pi*x+0.1) + 20;
y2 = 0.09*sin(2*pi*x);
tickfontsize = 18;
labelfontsize = 20;
% begin figure:
f1 = figure(1);
[ax, h1, h2 ] = plotyy(x,y1,x,y2)
% axis labels and font size:
set(get(ax(2),'Ylabel'),'String','Test1') ;
set(get(ax(1),'Ylabel'),'String','test2') ;
set(get(ax(1),'Ylabel'),'FontSize',labelfontsize) ;
set(get(ax(2),'Ylabel'),'FontSize',labelfontsize) ;
% left hand side ticks:
set(ax(1),'YLim',[6 10]);
set(ax(1),'YTick',[6:1:10]);
set(ax(1),'FontSize',tickfontsize);
% right hand side ticks:
set(ax(2),'YLim',[-0.13 0.14]);
set(ax(2),'YTick',[-0.1:0.05:0.1]);
set(ax(2),'FontSize',tickfontsize);
%print figure to eps:
print(f1,'-depsc2', './simpleoutput.eps');
Run Code Online (Sandbox Code Playgroud)

这里的C ++新手。
我是写cfd(ish)代码的科学人。我为所有求解函数创建了一个类,并且该类处理了网格上的操作。网格类希望能够看到存储在求解类中的一些变量,因为将它们全部传递给网格类似乎有点费劲。
因此,在我的研究中,我遇到了朋友班,但似乎无法正常工作。请参阅下面的完全缩减示例。类A是求解器,它创建了网格类B。即使我已经编写了朋友类B,我仍然遇到以下编译错误(g ++):
在成员函数'void B :: testB()'中:
错误:未在此范围内声明“ a1”
这是代码:
#include <iostream>
using namespace std;
class B {
private:
int b1;
public:
void testB(){
cout<<a1<<endl;
};
};
class A {
friend class B;
private:
int a1;
public:
void testA(){
a1=2;
B b;
b.testB();
};
};
int main(){
A a;
a.testA();
}
Run Code Online (Sandbox Code Playgroud) 我有一个活动,在线性布局中有几个视图,一个是textview,一个是我的游戏的主视图,这是我在代码中做的事情的自定义视图.
当我将以下代码添加到我的活动中时:
mTextView.setText("random text");
Run Code Online (Sandbox Code Playgroud)
onMeasure()在自定义视图中被调用,即textview上的setText似乎导致不同的视图重新测量.因为我的onmeasure()代码以不合需要的方式重置视图,所以我想避免这种情况发生.
在这种情况下导致调用onMeasure()的原因是什么?如何阻止它?
所以我是c ++的新手,我正在为科学应用而写作.
需要从几个输入文本文件中读取数据.
目前我将这些输入变量存储在一个对象中.(我们称之为inputObj).
我现在必须在我的所有对象周围传递这个"inputObj"是对的.看起来它刚刚成为全局变量的复杂版本.所以我想我可能会忽略OOP的观点.
我创建了一个g ++可编译的程序小例子:
#include<iostream>
class InputObj{
// this is the class that gets all the data
public:
void getInputs() {
a = 1;
b = 2;
};
int a;
int b;
};
class ExtraSolver{
//some of the work may be done in here
public:
void doSomething(InputObj* io) {
eA = io->a;
eB = io->b;
int something2 = eA+eB;
std::cout<<something2<<std::endl;
};
private:
int eA;
int eB;
};
class MainSolver{
// I have most things happening from here …Run Code Online (Sandbox Code Playgroud) 本质上,我希望我的两个类共享一些数据,我希望将这些数据作为shared_ptr对象的向量。
我已将代码缩减为以下简单的可编译示例。
我希望对象 A 查看对象 B 中初始化的数据。但是,当我尝试在 A 的方法内执行 Push_back() 时,它并没有更改 B 中的共享指针对象的向量的大小。(在与评论“这是兴趣点”一致。)
我需要使用什么方法来获得此功能,或者我走错了路。(这里是c++新手)
#include <memory>
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
class DataClass {
public:
int i_;
};
class B {
public:
// constructor:
B() : my_data_(std::vector<std::shared_ptr<DataClass> >()) {
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_.push_back(std::shared_ptr<DataClass> (new DataClass));
my_data_[0]->i_ = 1;
my_data_[1]->i_ = 2;
cout<<my_data_.size()<<endl;
};
// return the data
std::vector< std::shared_ptr<DataClass> > get_my_data() {
return my_data_;
};
// check the data:
void CheckData() {
cout<<my_data_.size()<<endl; // This is the …Run Code Online (Sandbox Code Playgroud)