none
Probleme mit std::vector in regulärer DLL RRS feed

  • Frage

  • Guten Abend,
    leider habe ich mit einem Vector in einer Funktion Probleme,
    welche sich in einer regulären DLL befindet.

    Aus meiner Anwendung heraus starte ich die pUtmDLL. Diese
    exportiert die Funktion GetAnt(), welche ich aus meiner An-
    wendung heraus aufrufe.

    void CRmDlg::OnBnClickedGenerateBtn()
    {
      char szAnt[50];
      std::vector<size_t> vuiAddr;

      vuiAnt.push_back(4);
      if (!theApp.m_pUtmDLL->GetAnt(szAnt, &vuiAddr))
      {
    ...
    return;
      }

      m_scMpEdit = CString(szMp);
      UpdateData(false);
    }


    bool CUtmDLL::GetKAnt(char* p_szAnt, vector<size_t>* p_pvuiAddr)
    {
      size_t i;
      size_t uiAddr;
      CRIRandom* pRIRandom;

      ...
      ...

      p_pvuiAddr->clear();
      pRIRandom = new CRIRandom;
      for (i = 0; i < 4; i++)
      {
        memset(szKeypart, NULL, 9);
        uiAddr = pRIRandom->RandomNumber(0, 16708);
    ...
    ...
        p_pvuiAddr->push_back(uiAddr); // <<--------------
      }
        
      delete pRIRandom

      return true;
    }

    es funktioniert alles einwandfrei bis auf die push_back Funktion,
    zwar wird das erste push_back ausgeführt, aber bei dem zweiten
    kommt die Fehlermeldung:

           "Windows hat einen Haltepunkt in Rm.exe ausgelöst.

    Dies kann auf eine Beschädigung des Heaps zurückzuführen sein,
    die auf ein Problem in Rm.exe oder in einer der geladenen DLLs
    hinweist.
    ..."

    mit der ich leider nichts anfangen kann. Weiß irgend jemand da weiter?

    Gruß
      Klaus.

    M. Thaddaeus

    Sonntag, 8. April 2018 15:35

Antworten

  • Hallo,

    ist der Pointer beim zweiten push-back denn noch gültig? Vielleicht überschreibst du ja etwas in deinen ausgeblendeten Bereichen "..." (du zeigst z.B. das memset von szKeypart, aber wir wissen nicht, wie es definiert ist,).

    Prüfe im Debugger ob der Pointer noch ok ist. Du könntest danach zum Beispiel auch vor dem push-back mal ne Schleife reinbauen und die Werte zunächst auslesen.

    Du kannst auch selbst die Größe des Heaps in den Projekt-Eigenschaften mal setzen. Aber ich vermute, dass der Pointer nicht mehr valid ist beim zweiten push-back.

    Gruß Guido

    Montag, 9. April 2018 06:54