小编Ser*_* K.的帖子

立即检测Windows上的堆损坏错误.怎么样?

我睡不着!:)

我在Windows上有一个相当大的项目,遇到了一些堆损坏问题.我已阅读所有SO,包括这个好主题:如何调试堆损坏错误?但是没有什么比开箱即用更能帮助我了.Debug CRTBoundsChecker检测到堆损坏,但地址总是不同的,并且检测点总是远离实际存储器重写.我没有睡到半夜,并制作了以下黑客:

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)

c c++ heap-memory virtualalloc heap-corruption

14
推荐指数
2
解决办法
6893
查看次数

C++ OO设计:模板参数的继承

我有一个继承链,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参数.

c++ oop inheritance templates

14
推荐指数
4
解决办法
7455
查看次数

如何使用Eigen不支持的levenberg marquardt实现?

我正在尝试最小化以下示例函数:

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)

所以我有两个问题:

  1. 为什么需要函数向量,为什么函数标量不够?
    我在哪里寻找答案的参考文献:
    http://www.ultimatepp.org/reference$Eigen_demo$en-us.html
    http://www.alglib.net/optimization/levenbergmarquardt.php

  2. 如何使用设置功能设置优化参数?

c++ optimization eigen

14
推荐指数
3
解决办法
1万
查看次数

x86_64上的软浮动

我从事没有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可以做到这一点吗?

gcc clang cross-compiling

13
推荐指数
1
解决办法
9928
查看次数

如何以可移植的方式检查C++中是否存在文件?

目前我使用此代码来检查,如果文件存在于WindowsPOSIX兼容操作系统(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)

问题:

  1. 这段代码有什么缺陷吗?(也许是一个无法编译的操作系统)

  2. 是否可以仅使用C/C++标准库以真正可移植的方式进行?

  3. 怎么改进呢?寻找规范的例子.

c c++ portability posix file

13
推荐指数
1
解决办法
2万
查看次数

运算符'=='不能应用于'方法组'类型的操作数

我有以下函数返回truefalse:

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)

我该如何解决?

.net c#

12
推荐指数
2
解决办法
2万
查看次数

打破; C++:它实际上正在打破哪个循环

关于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 **bestList
  • break这里的实例突破了第二个(内部)for循环.

是这样的吗?

c c++ loops break

12
推荐指数
2
解决办法
4万
查看次数

如何正确处理音频中断?

我创建了一个利用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)

c++ audio interrupt openal ios

12
推荐指数
1
解决办法
1766
查看次数

C/C++:周长和面积.长方体的体积

我想使用以下代码计算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)

c++ syntax volume area

12
推荐指数
1
解决办法
1961
查看次数

在C++中实现弱的侵入式指针

弱指针就像智能指针,除了弱指针的引用不会阻止垃圾收集,弱指针必须在使用之前检查它们的有效性.

在我们的项目中(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++ weak-references smart-pointers

11
推荐指数
1
解决办法
1976
查看次数