我睡不着!:)
我在Windows上有一个相当大的项目,遇到了一些堆损坏问题.我已阅读所有SO,包括这个好主题:如何调试堆损坏错误?但是没有什么比开箱即用更能帮助我了.Debug CRT和BoundsChecker检测到堆损坏,但地址总是不同的,并且检测点总是远离实际存储器重写.我没有睡到半夜,并制作了以下黑客:
DWORD PageSize = 0;
inline void SetPageSize()
{
if ( !PageSize )
{
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
PageSize = sysInfo.dwPageSize;
}
}
void* operator new (size_t nSize)
{
SetPageSize();
size_t Extra = nSize % PageSize;
nSize = nSize + ( PageSize - Extra );
return Ptr = VirtualAlloc( 0, nSize, MEM_COMMIT, PAGE_READWRITE);
}
void operator delete (void* pPtr)
{
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(pPtr, &mbi, sizeof(mbi));
// leave pages in reserved state, but free …Run Code Online (Sandbox Code Playgroud) 我有一个继承链,Base是基类.我希望能够编写一个继承Base和另一个Base派生类的类模板.我可以使用虚拟继承,但我发现了另一种解决方案.我想知道它是否是普通/相当/合法的类设计:
编写一个类模板,其中模板参数是从中派生的类,即它必须是Base或Base派生类.在构造函数中,我可以使用静态断言来确保用户不使用任何非法类作为模板参数.
如果它工作,我将永远不会有虚拟继承问题...问题是,它可以做到这一点.我从未在其他项目中看到它,所以我想在使用它之前确定它.
编辑:只是为了确保我不要混淆你,这里有一些代码:
class Base
{
};
class Derived : public Base
{
};
template <Class TheBase>
class MyDerived : public TheBase
{
};
Run Code Online (Sandbox Code Playgroud)
现在我可以使用Base或任何Base衍生的类,例如Derived,作为TheBase参数.
我正在尝试最小化以下示例函数:
F(x) = f[0]^2(x[0],...,x[n-1]) + ... + f[m-1]^2(x[0],...,x[n-1])
Run Code Online (Sandbox Code Playgroud)
最小化这种功能的常用方法可能是Levenberg-Marquardt算法.我想在c ++中执行这种最小化,并且已经使用Eigen进行了一些初步测试,从而得到了预期的解决方案.
我的问题如下:我习惯使用ie在python中进行优化scipy.optimize.fmin_powell.这里的输入函数参数是(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, direc=None).所以我可以定义一个func(x0),给出x0向量并开始优化.如果需要,我可以更改优化参数.
现在,Eigen Lev-Marq算法以不同的方式工作.我需要定义一个函数向量(为什么?)此外我无法设置优化参数.根据:
http://eigen.tuxfamily.org/dox/unsupported/classEigen_1_1LevenbergMarquardt.html
我应该能够使用setEpsilon()和其他设置函数.
但是当我有以下代码时:
my_functor functor;
Eigen::NumericalDiff<my_functor> numDiff(functor);
Eigen::LevenbergMarquardt<Eigen::NumericalDiff<my_functor>,double> lm(numDiff);
lm.setEpsilon(); //doesn't exist!
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
为什么需要函数向量,为什么函数标量不够?
我在哪里寻找答案的参考文献:
http://www.ultimatepp.org/reference$Eigen_demo$en-us.html
http://www.alglib.net/optimization/levenbergmarquardt.php
如何使用设置功能设置优化参数?
我从事没有FPU的嵌入式系统的软件.我希望能够在我的桌面上使用软件浮点库构建此软件,以获得更真实的性能视图.有没有人对如何实现这一点有任何想法?
到目前为止,我在使用-msoft-floatgcc 方面没有取得多大进展.我目前正在使用clang.通过使用标志-Xclang -msoft-float -Xclang -no-implicit-float并指定一个具有soft-float例程实现的库,我可以让我的应用程序进行编译.当我尝试运行它时,它总是会出现段错误.我可以说,这是因为这个程序所依赖的库没有用soft-float编译.该应用程序依赖于gtk,sqlite,expat,gcrypt,许多内部库和libc.
我想试着弄清楚如何构建一个具有soft-float支持的完整构建环境.我尝试了uclibc的buildroot和设置CC以及CXXclang的二进制文件,但由于编译gcc工具链的要求(例如autotools抱怨编译器版本不正确),这不起作用.因为我想在新的buildroot中使用clang作为编译器(为了获得软浮点支持),我认为没有迫切需要构建gcc.没有gcc可以做到这一点吗?
目前我使用此代码来检查,如果文件存在于Windows和POSIX兼容操作系统(Linux操作系统,Android的,MacOS的,的iOS,黑莓10):
bool FileExist( const std::string& Name )
{
#ifdef OS_WINDOWS
struct _stat buf;
int Result = _stat( Name.c_str(), &buf );
#else
struct stat buf;
int Result = stat( Name.c_str(), &buf );
#endif
return Result == 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:
这段代码有什么缺陷吗?(也许是一个无法编译的操作系统)
是否可以仅使用C/C++标准库以真正可移植的方式进行?
怎么改进呢?寻找规范的例子.
我有以下函数返回true或false:
public bool ValidateURL()
{
if (string.IsNullOrEmpty(txt22.Text) & string.IsNullOrEmpty(txt33.Text))
{
return false;
}
else
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
现在下面的代码在按钮上,但我得到" 操作员无法应用 "错误:
private void btn33_Click(object sender, EventArgs e)
{
if (ValidateURL==true)
{
MessageBox.Show("Enter data");
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
关于C++代码的简单问题:
for(int i=0;i<npts;i++)
{
for(int j=i;j<2*ndim;j++)
{
if(funcEvals[i]<bestListEval[j])
{
bestListEval[j] = funcEvals[i];
for(int k=0;k<m_ndim;k++)
bestList[j][k] = simplex[i][k];
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想确保这一点
double **simplex最多插入一次double **bestListbreak这里的实例突破了第二个(内部)for循环.是这样的吗?
我创建了一个利用OpenAL进行音频播放的OpenGL 3D游戏,如果在音频设备初始化之前按下"Home"按钮,则会遇到丢失音频的问题.我试图连接到音频会话中断处理程序,但我的回调永远不会被调用.无论我是最小化还是最大化我的申请.永远不会调用我的"OpenALInterruptionListener".
我究竟做错了什么?
AudioSessionInitialize(NULL, NULL, OpenALInterriptionListener, this);
void OpenALInterriptionListener(void * inClientData, UInt32 inInterruptionState)
{
OpenALDevice * device = (OpenALDevice *) inClientData;
if (inInterruptionState == kAudioSessionBeginInterruption)
{
alcSuspendContext(_context);
alcMakeContextCurrent(_context);
AudioSessionSetActive(false);
}
else if (inInterruptionState == kAudioSessionEndInterruption)
{
UInt32 sessionCategory = kAudioSessionCategory_AmbientSound;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(true);
alcMakeContextCurrent(_context);
alcProcessContext(_context);
}
}
Run Code Online (Sandbox Code Playgroud) 我想使用以下代码计算rects的面积和周长:
rect a;
a = ( -----
! !
-----a );
std::cout << a.area() << std::endl;
std::cout << a.perimeter() << std::endl;
Run Code Online (Sandbox Code Playgroud)
为此我制作了以下课程:
class rect
{
public:
rect():w(0), h(2) {}
rect& operator - () { w += 0.5f; return *this; }
rect& operator - (rect&) { w += 0.5f; return *this; }
rect& operator -- (int a) { w += a; return *this; }
rect& operator -- () { w += 1; return *this; }
rect& operator ! () { h …Run Code Online (Sandbox Code Playgroud) 弱指针就像智能指针,除了弱指针的引用不会阻止垃圾收集,弱指针必须在使用之前检查它们的有效性.
在我们的项目中(Linderdaum Engine http://www.linderdaum.com)中,我们使用了侵入式指针.为了避免循环引用和孤立孤岛,我们通过以下方式实现了弱入侵指针:
namespace LPtr
{
clPtr<iObject> GetObjectsGraphPtrWrapper( sEnvironment* Env, iObject* Obj, size_t Generation );
};
/// Intrusive weak smart pointer
template <class T> class clWeakPtr
{
public:
/// default constructor
clWeakPtr(): Env( NULL ), FObject( NULL ), FGeneration( 0 ) {}
explicit clWeakPtr( T* Ptr )
: Env( Ptr ? Ptr->Env : NULL )
, FObject( Ptr )
, FGeneration( Ptr ? Ptr->FGeneration : 0 ) {}
explicit clWeakPtr( const clPtr<T>& Ptr )
: Env( Ptr ? …Run Code Online (Sandbox Code Playgroud) c++ ×8
c ×3
.net ×1
area ×1
audio ×1
break ×1
c# ×1
clang ×1
eigen ×1
file ×1
gcc ×1
heap-memory ×1
inheritance ×1
interrupt ×1
ios ×1
loops ×1
oop ×1
openal ×1
optimization ×1
portability ×1
posix ×1
syntax ×1
templates ×1
virtualalloc ×1
volume ×1