자기참고 구조체 에러

sjlee96의 이미지

자기참조 구조체를 써서 뭘 좀 해보려고 하는데 에러 비스무리한 게 나는데, 디버깅이 어려워 도움을 구합니다.
박스안에 입자가 몇 개 있는 지 파악하는 프로그램 이예요.
번호가 매겨진 공이 1부터 1000까지 있는데, 박스 100개에 무작위로 들어가 있다고 보시면 됩니다.
C로 만들고 있고, Linux에서 Intel 컴파일러 이용하고 있어요.

구조체를 먼저 하나 선언했습니다.

typedef struct particles_in_this_box p_box;
 
struct particles_in_this_box
{
    long pID;     //particle ID
    p_box* next;
};

그 다음에 malloc()으로 메모리를 할당했죠.
NB는 박스의 총 갯수입니다.
p_box **cpib = (p_box **)malloc(NB * sizeof(p_box *)); //malloc으로 메모리 할당
bzero(cpib, NB * sizeof(p_box *));  //NULL로 초기화

다음에는 모든 입자의 갯수만큼 loop을 돌려서 해당 particle이 어느 박스에 있는지 '자기참조 구조체'(여기선,p_box* next가 되겠네요.)를 이용해서 쭈~욱 저장합니다.
nd는 모든 particle의 갯수입니다.
for(long i = 0; i < nd; i ++ )
 
{
    long boxID =look_for_boxID (i);   //여기서는 문제가 없어요. 해당 i번째 입자가 몇 번 박스에 들어가 있는 지 제대로 알려주네요.
 
    p_box *tmp_cpib = (p_box *) malloc(sizeof( p_box ));				
 
    tmp_cpib->pID = pID;	
    tmp_cpib->next = cpib[boxID]; // 여기에서 문제가 나는 걸 알았어요. 주석으로 막았다 풀어보니 에러가 없다가 생겨버리네요.
    cpib[boxID] = tmp_cpib;
 
    free(tmp_cpib);
 
}

이런 에러를 뱉어내요.
*** glibc detected *** double free or corruption (top): 0x08509710 ***
make: *** [run] Aborted

이해가 잘 안됩니다. 고수님들 도움을 부탁드립니다.
sjlee96의 이미지

    p_box *tmp_cpib = (p_box *) malloc(sizeof( p_box )); 
 
    ...
    ...
    cpib[boxID] = tmp_cpib;
    free(tmp_cpib);

tmp_cpib에 주소를 cpib에 넘겨 준다음에 tmp_cpib를 free해버리는 바람에 cpib에 할당한 주소를 그냥 날려버렸네요.
여기서 문제가... :-)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.