2014-04-18 2 views
-1

하나의 소비자가 큐에 쓰고 프로듀서가 읽는 다중 스레드 응용 프로그램이 있습니다. 여기 내 코드가 있습니다.std :: queue를 사용한 메모리 누출

//my_class.h 

class My_class{ 

    My_class(); 

    double time; 

    struct my_struct my_struct; 

    unsigned char my_buffer[1000]; 

    My_class& operator=(const My_class &copy); 

}; 


//my_class.cpp 

    My_class::My_class(){ 

     my_struct.mem1=30; 

     my_struct.mem2=100; 

     //other struct assignments. 

     time=0.0; 

     memset(buffer,0xEF,sizeof(buffer)); 

    } 

    My_class& My_class::operator=(const My_class& copy){ 

     if(this!=&copy){ 

      my_struct.mem1=copy.my_struct.mem1; 

      my_struct.mem2=copy.my_struct.mem2; 

      memcpy_s((void*)buffer,copysize,(void*)copy.buffer,copy.buffer.copysize) 

      time=copy.time; 
     } 
     return *this; 
    } 

메인에는 대기열이 있습니다.

std::queue<My_class> my_queue; 

My_class my_class_variable;//Filled somewhere in thread1 

    //thread1.cpp 


    My_mutex.lock(); 

     my_queue.push_back(my_class_variable); 

    My_mutex.unlock(); 

    //thread2.cpp 


    My_mutex.lock(); 

     my_queue.pop(); 

    My_mutex.unlock(); 

코드를 프로파일 할 때 내가 푸시 할 때 메모리 누수가 많이 발생하며 문제가 될 수 있습니까?

+1

'copy.buffer.copysize' 란 무엇입니까? 실제 코드를 게시하는 것이 좋습니다. 또한 할당 연산자를 제공해야하는 것처럼 보이지 않습니다. – juanchopanza

+0

@juanchopanza 실제로 같은 크기입니다. 복사 할당입니다 – barp

+0

메모리 누수가 있는지 확인하기 위해 무엇을 사용하고 있습니까? 당신이 게시 한 코드에서 아무 것도 보지 못한다면 메모리 누수가 발생할 수 있습니다 ('memset'에 사용 된'buffer '는 실제로'my_buffer'라고 가정합니다.) – Lilshieste

답변

-2

coping 생성자를 추가하십시오.

+0

문제가 아닌가요? 새로운 대상을 실제로 만들지는 못합니다. –

+0

my_queue.push_back (my_class_variable); 복사 생성자를 호출합니다. – tas

+0

클래스에 오류가 있습니다. 당신은 이것을 점검 할 수 있고, 브레이크 포인트를 넣을 수 있습니다. – tas