세그멘테이션 오류가 나는 이유를 모르겠어요..

해봐의 이미지

일단, main 을 보면은..


class Test : public Runnable
{
public:
	void run()
	{
		for(int i = 0 ; i < 10 ; i++)
		{
			TRACE1("aaaaaaaaa");
			sleep(1);
		}
	}
};

int main()
{
	Executor* executor = new PooledExecutor();
	executor->init(NULL);
	
	Test test;
	executor->execute(&test);
//
//	while(true)
//		sleep(1000);
	
	return 0;
}

그리고, PooledExecutor를 보면,,..(실제 pooled는 아직 구현안한상태)

class WorkerThread
{
private:
	Runnable* m_prunnable;
	pthread_t* m_pthread;

	static void* do_work(void* arg)
	{
	}
	
public:
	
	WorkerThread(Runnable* runnable)
	:m_prunnable(runnable)
	{
	}
	
	void start()
	{
		int pthread_create_ret = pthread_create(this->m_pthread, NULL, WorkerThread::do_work, this);
		printf("%d\n", pthread_create_ret);
		if(pthread_create_ret != 0)
			throw pthread_create_ret;
	}
};



void PooledExecutor::init(void* arg)
{
}

void PooledExecutor::close(void* arg)
{
}


void PooledExecutor::execute(Runnable* arg)
{
	WorkerThread worker(arg);
	worker.start();
}

여기서 thread creation 시 에러가 발생합니다. 왜 그럴까요..
pthread_create의 리턴도 안찍힙니다. 왜 그럴까요..

단, void start() 부분에서 create thread 부분을 없애고 아무 루틴이나 넣으면 잘 돌아가요..

[/code]

doldori의 이미지

m_pthread를 초기화하지 않아서 그런 것 같은데요.

markboy의 이미지

    pthread_t m_thread;
....
    int pthread_create_ret = pthread_create(&(this->m_thread), NULL, WorkerThread::do_work, this); 
해봐의 이미지

헉스.. 완전,,, 질문같지 않은 질문 이었네여..,, 하여튼 감사합니다.