class 소멸자가 계속 호출됨..무한루프

blee의 이미지

이상한 증상은 프로그램 종료시 class 소멸자가 계속 호출 됩니다.
아래와 같이 printf 해 보면.. 콘솔에 ~CTest가 무쟈게 찍히다가 세그먼트 폴트
가 발생합니다. --;

CTest::~CTest()
{
printf("~CTest\n");
}

나름대로 이유를 판단해 보면 class와 thread를 같이 사용하는데서
문제가 발생하지 않았나 생각합니다. 아래와 같이 하는데 혹 문제가 있을수
있는지 한번 판단해 주세요.

1. class 를 생성하고, 초기화 시에 thread를 생성했습니다.
2. class 생성되고, thread가 생성되었고
3. thread에서 class 함수 Work를 호출합니다.
4. Work 함수는 class 내의 맴버변수등을 사용합니다.

간략한 예를 들면
// 쓰레드 함수
void* thread_func(void* arg)
{
CTest* pObject = (CTest*)arg;
pObject->Work();
return 0;
}
// 생성자
CTest::CTest()
{
}
// 소멸자
CTest::~CTest()
{
}
// 초기화 함수
CTest::Init()
{
// thread 생성
}
// 스레드에서 호출하는 함수
CTest::Work()
{
:
// CTest의 맴버 변수를 사용하기 위해서 이렇게 했습니다.
}

위와 같은 형태로 되어 있습니다.
제 생각에 thread에서 class 함수를 호출하는 식으로 사용하는것이
문제가 되는 가? 하는 것입니다.
ms원도우 계열에서는 이런씩으로 사용했었는데..
이런 경험이 있으신 분 계신가요?

liongo의 이미지

후움 정확한 답변을 드리긴 힘들것같습니다

제가보기엔.. 처리 방식상의 문제일것 같습니다만..

단시 소멸자가 계속 호출된다면 delete를 누가 계속 콜하고 있다는것

입니다.. 소멸자에 this포인터의 주소값을 찍어보시고

항상 같은 주소값이 찍힌다면 일단 해당 오브젝트가 한번

소멸된후에도 계속 콜된다는것일겁니다..

사용후 delete된 Object를 다시 delete 하는 부분을 수정하셔야

하지 않을까요? Object List를 가지고 사용하신다면 리스트에서

빠지지 않아서 delete후에도 해당 Pointer로 콜을 시도하고있다던가

아니면.. 여러 쓰레드가 한오브젝트로 동시에 접근을 해버린다던가..

그래서 한쓰레드가 delete를 한후에도 사용하려했다던가의

문제가 아닐까 의심이 되는군요.. 참고하시길 바랍니다..

' 형식이 내용을 규정한다. '

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.