Debug Assertion Failed dbgdel.cpp error

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • marat

    #1

    Debug Assertion Failed dbgdel.cpp error

    I have a managed c++ function below that makes a call to an unmanaged c++ dll
    .. This function is called from a C# app, resulting in a

    "Debug Assertion Failed dbgdel.cpp Line 52
    Expression: _BLOCK_TYPE_IS_ VALID(pHead->nBlockUse)" errir message.

    This happens on function exit, looks like related to destruction of some vector.

    Any ideas why ????


    ArrayList*
    NM::doSomething (ArrayList* anchorStrikesLi st,
    ArrayList* anchorVolsList,
    ArrayList* allStrikesList

    {
    vector<double> anchorStrikesVe c, anchorVolsVec, allStrikesVec, allVolsVec;

    ////// convert to vectors ////

    for (int i = 0; i < anchorStrikesLi st->Count; ++i)
    {
    double val = *dynamic_cast<d ouble __gc *>(anchorStrike sList->get_Item(i)) ;
    anchorStrikesVe c.push_back(val );
    }
    for (i = 0; i < anchorVolsList->Count; ++i)
    {
    double val = *dynamic_cast<d ouble __gc *>(anchorVolsLi st->get_Item(i)) ;
    anchorVolsVec.p ush_back(val);
    }
    for (i = 0; i < allStrikesList->Count; ++i)
    {
    double val = *dynamic_cast<d ouble __gc *>(allStrikesLi st->get_Item(i)) ;
    allStrikesVec.p ush_back(val);
    }

    // unmanaged c++ dll call
    foo(anchorStrik esVec, anchorVolsVec, allStrikesVec, allVolsVec);

    // Convert back to vector of computed vols and return
    ArrayList* allVolsList = new ArrayList();
    for (i = 0; i < allVolsVec.size (); ++i)
    {
    double vol = allVolsVec[i];
    allVolsList->Add(__box(vol) );
    }
    return allVolsList;

    }
  • marat

    #2
    Re: Debug Assertion Failed dbgdel.cpp error

    Surely someone must have had experience with this one ?

    mruvinov@yahoo. com (marat) wrote in message news:<fc7075e5. 0309101301.2be3 44d1@posting.go ogle.com>...[color=blue]
    > I have a managed c++ function below that makes a call to an unmanaged c++ dll
    > . This function is called from a C# app, resulting in a
    >
    > "Debug Assertion Failed dbgdel.cpp Line 52
    > Expression: _BLOCK_TYPE_IS_ VALID(pHead->nBlockUse)" error message.
    >
    > This happens on function exit, looks like related to destruction of some vector.
    >
    > Any ideas why ????
    >
    >
    > ArrayList*
    > NM::doSomething (ArrayList* anchorStrikesLi st,
    > ArrayList* anchorVolsList,
    > ArrayList* allStrikesList
    >
    > {
    > vector<double> anchorStrikesVe c, anchorVolsVec, allStrikesVec, allVolsVec;
    >
    > ////// convert to vectors ////
    >
    > for (int i = 0; i < anchorStrikesLi st->Count; ++i)
    > {
    > double val = *dynamic_cast<d ouble __gc *>(anchorStrike sList->get_Item(i)) ;
    > anchorStrikesVe c.push_back(val );
    > }
    > for (i = 0; i < anchorVolsList->Count; ++i)
    > {
    > double val = *dynamic_cast<d ouble __gc *>(anchorVolsLi st->get_Item(i)) ;
    > anchorVolsVec.p ush_back(val);
    > }
    > for (i = 0; i < allStrikesList->Count; ++i)
    > {
    > double val = *dynamic_cast<d ouble __gc *>(allStrikesLi st->get_Item(i)) ;
    > allStrikesVec.p ush_back(val);
    > }
    >
    > // unmanaged c++ dll call
    > foo(anchorStrik esVec, anchorVolsVec, allStrikesVec, allVolsVec);
    >
    > // Convert back to vector of computed vols and return
    > ArrayList* allVolsList = new ArrayList();
    > for (i = 0; i < allVolsVec.size (); ++i)
    > {
    > double vol = allVolsVec[i];
    > allVolsList->Add(__box(vol) );
    > }
    > return allVolsList;
    >
    > }[/color]

    Comment

    • marat

      #3
      Re: Debug Assertion Failed dbgdel.cpp error

      The problem appears to occur due to the unmanaged foo() call's last
      argument which is a non const reference to a vector.

      The prototype of foo is :

      void foo(const vector<double>& l1,
      const vector<double>& l2,
      const vector<double>& l3,
      vector<double>& result);

      If result vector is empty, no problem occurs.
      If non-empty then the below error occurs.

      The last argument needs to be non const.

      Anyone know how to solve this one ?
      [color=blue][color=green]
      > >
      > >
      > > ArrayList*
      > > NM::doSomething (ArrayList* anchorStrikesLi st,
      > > ArrayList* anchorVolsList,
      > > ArrayList* allStrikesList
      > >
      > > {
      > > vector<double> anchorStrikesVe c, anchorVolsVec, allStrikesVec, allVolsVec;
      > >
      > > ////// convert to vectors ////
      > >
      > > for (int i = 0; i < anchorStrikesLi st->Count; ++i)
      > > {
      > > double val = *dynamic_cast<d ouble __gc *>(anchorStrike sList->get_Item(i)) ;
      > > anchorStrikesVe c.push_back(val );
      > > }
      > > for (i = 0; i < anchorVolsList->Count; ++i)
      > > {
      > > double val = *dynamic_cast<d ouble __gc *>(anchorVolsLi st->get_Item(i)) ;
      > > anchorVolsVec.p ush_back(val);
      > > }
      > > for (i = 0; i < allStrikesList->Count; ++i)
      > > {
      > > double val = *dynamic_cast<d ouble __gc *>(allStrikesLi st->get_Item(i)) ;
      > > allStrikesVec.p ush_back(val);
      > > }
      > >
      > > // unmanaged c++ dll call
      > > foo(anchorStrik esVec, anchorVolsVec, allStrikesVec, allVolsVec);
      > >
      > > // Convert back to vector of computed vols and return
      > > ArrayList* allVolsList = new ArrayList();
      > > for (i = 0; i < allVolsVec.size (); ++i)
      > > {
      > > double vol = allVolsVec[i];
      > > allVolsList->Add(__box(vol) );
      > > }
      > > return allVolsList;
      > >
      > > }[/color][/color]

      Comment

      Working...