[완료]C언어 메모리 관리에 대해 질문이 있습니다.

visualplus의 이미지

c언어, mysql연동을 하면서 간단히 사용할 수 있도록
db 연결, 쿼리 보내기, 데이타값 가져오기 등을 묶어논 헤더를 만드려고 합니다.

그 중 제가 DATABASE란 구조체를 만들어놨는데

struct DATABASE {
    MYSQL *db;
    MYSQL_RES *sql_result;
    MYSQL_ROW sql_row;
    MYSQL_ROW sql_row_array[255];
};

이렇게 선언 해 놨습니다.

그리고 main에서 사용하는것은

    struct DATABASE *database;
 
    database = (struct DATABASE *)malloc(sizeof(database));

이런식으로 사용했습니다.

그런데 쿼리를 보낸 뒤 결과값을 가져올 때 한꺼번에 모두 가져올 수 있는 함수를 만드려고 하는데..

void Fetch_all(struct DATABASE *database)
{
    MYSQL_ROW tmp;
    int cnt = 0;
 
    while ((tmp = mysql_fetch_row(database->sql_result)) != NULL) {
        database->sql_row_array[cnt] = tmp;
    }
}

이렇게 만들어놨습니다.
여기까지는 잘 됩니다.
근데 main마지막에 free(database)를 해 놨는데 여기서 에러가 나오네요.

*** glibc detected *** free(): invalid next size (fast): 0x0804a008 ***

이런 에러가 납니다.

제가 추측하는것은 database변수에 충분한 공간이 확보가 안된것 같다는 생각이 듭니다.
혹시 구조체에 메모리 공간을 할당하는 방법이 잘못된건가요?

eminency의 이미지

malloc시 sizeof(database)라고 하시면 포인터이므로 아마 (32비트 시스템이라면) 4바이트만 할당될겁니다.
sizeof(struct DATABASE)로 하셔야 합니다.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

visualplus의 이미지

감사합니다^^