[완료]C언어 메모리 관리에 대해 질문이 있습니다.
글쓴이: visualplus / 작성시간: 금, 2008/08/08 - 3:51오후
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변수에 충분한 공간이 확보가 안된것 같다는 생각이 듭니다.
혹시 구조체에 메모리 공간을 할당하는 방법이 잘못된건가요?
Forums:
malloc시
malloc시 sizeof(database)라고 하시면 포인터이므로 아마 (32비트 시스템이라면) 4바이트만 할당될겁니다.
sizeof(struct DATABASE)로 하셔야 합니다.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
감사합니당
감사합니다^^
댓글 달기