C语言中返回MYSQL_RES的函数

3

我想在C代码中使用MySQL,但是在从函数返回结果时遇到了问题。我已经定义了一个如下的函数(conn是一个正确设置的全局连接):

int _mysql_query(const char *query, MYSQL_RES *result){
        int num_rows=0;
        if (pthread_mutex_lock(&mysqlmutex)==0){
                if (!mysql_query(conn,query)){
                        result=mysql_store_result(conn);
                        if (result!=NULL) num_rows=mysql_num_rows(result);
                }
                if (pthread_mutex_unlock(&mysqlmutex)!=0){
                        error("Error unlocking mysql mutex");
                }
        }else{
                error("Error locking mysql mutex!");
        }
        return num_rows;
}

当我调用 mentione 函数时:

MYSQL_RES *tasks;
     if (_mysql_query(query,tasks)>0){
         MYSQL_ROW row;
         while ((row=mysql_fetch_row(tasks))!=NULL){
               printf("%s\n",row[0]);
         }
    }
mysql_free_result(tasks);

我在执行mysql_fetch_row(tasks)时遇到了分段错误。为什么会出现这种情况?谢谢。
1个回答

1
你将指针按值传递,所以当函数完成时,你仍然保留指针的上一个值(未初始化)。
解决方案:传递指向指针的指针,即 &tasks
 MYSQL_RES *tasks = NULL;
 if (_mysql_query(query,&tasks)>0 && task!=NULL)
 .........

 int _mysql_query(const char *query, MYSQL_RES **result)
 {
      ......
      *result=mysql_store_result(conn);    
      ......

谢谢回复,但我已经尝试使用_mysql_query(query,&tasks)调用函数,但是我得到了传递不兼容指针类型的错误。 - morfeus
在调用函数之前,还要使用NULL初始化指针,并在函数调用后立即检查它是否不为NULL。请参见我的编辑。 - Dabo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接