当前位置: 技术问答>linux和unix
Segmentation fault 郁闷
来源: 互联网 发布时间:2014-11-24
本文导语: 以下程序是用mysql c api计算t_flow_data表项的记录数: 编译命令行如下: gcc -I /usr/local/mysql/include/mysql -c connect_database.c gcc -L /usr/local/mysql/lib/mysql/ -lmysqlclient -lm -o connect_database conne ct_database.o 执行时,结果正确...
以下程序是用mysql c api计算t_flow_data表项的记录数:
编译命令行如下:
gcc -I /usr/local/mysql/include/mysql -c connect_database.c
gcc -L /usr/local/mysql/lib/mysql/ -lmysqlclient -lm -o connect_database conne
ct_database.o
执行时,结果正确选择出来了,但是出现Segmentation fault:
Connect Succ
The result is 4999999
Segmentation fault
到底是怎么回事啊?
#include <stdlib.h>
#include <stdio.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
#include "configuration.inc.h"
/*
* 函数介绍:该函数负责数据库的连接
* 输入参数:
* 输出参数:
* 返回值 :成功时返回连接标识,否则返回NULL
* 全局变量:
* 调用模块:
* 抛出异常:错误时输出错误信息
*/
int Connect_DataBase(MYSQL *db_connect)
{
mysql_init(db_connect);
if (!mysql_real_connect(db_connect , HOST , DBUSER , DBPASSWD , DBNAME , 0 ,
NULL ,0))
{
fprintf(stderr , "Failed to Connect DataBase , Error:%sn" , mysql_error(db_
connect));
return 0;
}
else
return 1;
}
int main()
{
MYSQL *mysql;
MYSQL_RES *mysql_store;
MYSQL_ROW row;
if (Connect_DataBase(mysql))/* Connect DataBase*/
{
printf("Connect Succn");
}
else
exit(-1);
mysql_query(mysql , "select count(*) from t_flow_data");
mysql_store = mysql_store_result(mysql);
row = mysql_fetch_row(mysql_store);
printf("The result is %sn" , row[0]);
mysql_free_result(mysql_store);
mysql_close(mysql);
return 1;
}
编译命令行如下:
gcc -I /usr/local/mysql/include/mysql -c connect_database.c
gcc -L /usr/local/mysql/lib/mysql/ -lmysqlclient -lm -o connect_database conne
ct_database.o
执行时,结果正确选择出来了,但是出现Segmentation fault:
Connect Succ
The result is 4999999
Segmentation fault
到底是怎么回事啊?
#include <stdlib.h>
#include <stdio.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
#include "configuration.inc.h"
/*
* 函数介绍:该函数负责数据库的连接
* 输入参数:
* 输出参数:
* 返回值 :成功时返回连接标识,否则返回NULL
* 全局变量:
* 调用模块:
* 抛出异常:错误时输出错误信息
*/
int Connect_DataBase(MYSQL *db_connect)
{
mysql_init(db_connect);
if (!mysql_real_connect(db_connect , HOST , DBUSER , DBPASSWD , DBNAME , 0 ,
NULL ,0))
{
fprintf(stderr , "Failed to Connect DataBase , Error:%sn" , mysql_error(db_
connect));
return 0;
}
else
return 1;
}
int main()
{
MYSQL *mysql;
MYSQL_RES *mysql_store;
MYSQL_ROW row;
if (Connect_DataBase(mysql))/* Connect DataBase*/
{
printf("Connect Succn");
}
else
exit(-1);
mysql_query(mysql , "select count(*) from t_flow_data");
mysql_store = mysql_store_result(mysql);
row = mysql_fetch_row(mysql_store);
printf("The result is %sn" , row[0]);
mysql_free_result(mysql_store);
mysql_close(mysql);
return 1;
}
|
你的指针都没有分配,但是free了,看看你的调用给你返回的内存空间是不是需要你自己分配和释放
|
当程序企图读写分配给它的存储区之外的单元或写只读存储区时产生sigsegv
错误,导致的原因常常是由于引用了一个空的或未赋初值的指针,也可能是由于数组越界引起
错误,导致的原因常常是由于引用了一个空的或未赋初值的指针,也可能是由于数组越界引起