Помогите найти ошибку в коде:
| Код | #pragma once #include <windows.h>
class PlanThread { private: struct SEGMENTINFO { int nSegmentNumber; HANDLE hThread; int nSegmentState; }; int GetFreeSegment(); SEGMENTINFO* m_pSegmentInformation; //информация о сегменте
public: __int64 m_nSum; //сумма чисел int m_nCountSegment; //количество сегментов LPTHREAD_START_ROUTINE m_lpStartAdress; PlanThread() : m_pSegmentInformation(NULL) , m_nSum(0) , m_nCountSegment(0) , m_lpStartAdress(0) {} // ~PlanThread() // { // if(m_pSegmentInformation) // free(m_pSegmentInformation); // } void CreateThreads(); void DeleteThread(); };
#include "PlanThread.h"
int PlanThread::GetFreeSegment() {
if(m_pSegmentInformation) { for(int nCounter = 0; nCounter < m_nCountSegment; nCounter++) if(m_pSegmentInformation[nCounter].nSegmentState == 3) return nCounter; } m_nCountSegment++; m_pSegmentInformation = (SEGMENTINFO*)realloc(m_pSegmentInformation,m_nCountSegment*sizeof(SEGMENTINFO)); return m_nCountSegment;
return -1; }
void PlanThread::CreateThreads() { int nFreeSegment = GetFreeSegment(); m_pSegmentInformation[0].nSegmentNumber = nFreeSegment; m_pSegmentInformation[0].nSegmentState = 1; m_pSegmentInformation[nFreeSegment].hThread = CreateThread(NULL,NULL,m_lpStartAdress,&nFreeSegment,NULL,NULL); }
|
Ошибка заключается в том, что при втором запуске функции CreateThread прога вылетает
| Код | m_pSegmentInformation = (SEGMENTINFO*)realloc(m_pSegmentInformation,m_nCountSegment*sizeof(SEGMENTINFO));
|
Именно на втором вызове, т.е. первый вызов функции происходит успешно |