2011-07-04 2 views
1

저는 Ansi C와 sqlite3_get_table을 사용하고 있습니다. 배열에 대한 포인터로 전달 된 쿼리 결과 벡터에 액세스 할 수 없다는 점을 제외하고는 모두 작동합니다. 여기에 내 코드가 있습니다 ...sqlite3_get_table에서 결과 배열에 액세스

char **sql_results; 

sqlite3_get_table(open_database, sql_query, 
     &sql_results, &RecordCount, &ColumnCount, &error_msg); 

for (int i = 0; i <= (RecordCount + 1)* (ColumnCount); i++) 
    printf("%10d %10s\n",i, sql_results[i]); //get "EXC BAD ACCESS" message 

어떻게 sql_results[i]을 수정합니까? 감사.

i <= (RecordCount + 1)* (ColumnCount) 

당신에게 문제를 일으키는 :

+0

작은 테이블에만 적합하고 큰 테이블의 경우 수동으로 쿼리를 수행하는 것이 더 도움이된다는 점을 알고 계십니까? –

답변

2

나는이 작품을 생각합니다. 당신은 또한 시도해 봤어

i < (RecordCount + 1)* (ColumnCount) 
+0

+1 : 모호한 다른 문제는 그 값이 UTF-8이라는 것입니다.하지만 그럴 것 같지 않습니다. –

+0

fyr. 빙고! 변수가 아니라 제안한대로 루프가 문제였습니다. 나는 LT만으로 시험을 변경했고 효과가 있었다. 감사. – MonkeyBusiness

1

당신은 sqlite3_get_table에 의해 반환되는 값이 SQLITE_OK 있는지 확인해야한다; 그렇지 않으면 결과 테이블에 액세스하는 것이 안전하지 않습니다.

또한 deprecated API임을 알고 있어야합니다. 그리고 메모리를 해제하려면 sqlite3_free_table에 전화를해야합니다. 지금 당신은 메모리 누수가있는 것처럼 보입니다. (또는 이미 해본 적이 있지만 우리에게 보여주기를 거부했습니다.)

+0

좋은 제안. 문제와 관련이 있다고 생각하는 코드 만 보여 주었지만 free_table을 잊어 버렸습니다. 감사. – MonkeyBusiness

관련 문제