Mailinglisten-Archive |
Hallo,
ich habe ein Problem mit dem angehängten (Test-) Programm:
in der Zeile 147 (Abfrage mit select) bekomme ich folgenden Fehler:
Program received signal SIGSEGV, Segmentation fault. chunk_alloc
(ar_ptr=0x401112c0, nb=40) at malloc.c:2805 2805
Backtrace:
#0 chunk_alloc (ar_ptr=0x401112c0, nb=40) at malloc.c:2805
#1 0x4008583c in malloc () at malloc.c:2181
#2 0x40028efa in my_malloc () from /usr/lib/libmysqlclient.so.6
#3 0x40024d9f in read_rows () from /usr/lib/libmysqlclient.so.6
#4 0x400263c2 in mysql_real_query () from /usr/lib/libmysqlclient.so.6
#5 0x400273f8 in mysql_query () from /usr/lib/libmysqlclient.so.6
#6 0x8048eb5 in main () at main.c:147
Danke für die Hilfe,
Patrik Lehmann
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
int main(void)
{
MYSQL *db;
MYSQL_RES *result;
MYSQL_FIELD *fields;
MYSQL_ROW *row,*last_row;
unsigned i,j,jend, num_fields;
unsigned long **lengths;
// Initialisation
if ((db=mysql_init(db))==NULL) {
printf("Not enough memory\n");
exit (1);
}
if (!(db=mysql_connect(db,"localhost",NULL,NULL))){
fprintf(stderr, "Failed to send options: Error: %s\n", mysql_error(db));
exit (2);
}
// DB Select
if (mysql_select_db(db, "test")!=0) {
fprintf(stderr, "Failed to selct database: Error: %s\n", mysql_error(db));
exit (3);
}
row=(MYSQL_ROW *) malloc(sizeof(row));
last_row=(MYSQL_ROW *)malloc(sizeof(last_row));
lengths=(unsigned long **)malloc(sizeof(lengths));
// List tables
if ((result=mysql_list_tables(db,""))==NULL) {
fprintf(stderr, "Failed to list tables: Error: %s\n", mysql_error(db));
exit (4);
}
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i < num_fields; i++)
{
printf("%s:\n", fields[i].name);
}
row=(MYSQL_ROW *) malloc(sizeof(row));
while ((row[0] = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i], row[0][i] ? row[0][i] : "NULL");
}
printf("\t");
}
printf("\n");
printf("\n");
// Load Tables
if ((mysql_query(db,"select pcid,typ, buydate,vname from PC left join
hersteller using (vid);")) != 0) {
fprintf(stderr, "Failed to select Data: Error: %s\n", mysql_error(db));
exit (5);
}
if ((result=mysql_store_result(db)) == NULL) {
fprintf(stderr, "Failed to store result: Error: %s\n", mysql_error(db));
exit (6);
}
// Show fields
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i < num_fields; i++)
{
printf("[%s]:\t", fields[i].name);
}
printf("\n");
// Show Tables
last_row=(MYSQL_ROW *)malloc(sizeof(last_row));
lengths=(unsigned long **)malloc(sizeof(lengths));
for(i = 0; i < num_fields; i++) lengths[0][i]=0;
j=1;
while ((row[j] = mysql_fetch_row(result)))
{
lengths[j]=mysql_fetch_lengths(result);
j++;
}
jend=j;
for (j=1; j < jend; j++) {
for (i=0; i < num_fields; i++) {
lengths[0][i]= strlen(row[j][i] ? row[j][i] : "NULL");
printf("[%.*s] ", (int) lengths[j][i], row[j][i] ? row[j][i] : "NULL");
printf("%*.0d ", (int)( lengths[0][i]-lengths[j][i]),0);
}
printf("\n");
}
printf("\n");
// CREATE Table
printf("creating table:\n");
if ((mysql_query(db,"create table users (user_id integer AUTO_INCREMENT NOT
NULL, uname varchar(40), pcid integer references PC, job varchar(20), primary
key(user_id))")) != 0) {
fprintf(stderr, "Failed to create table: Error: %s\n", mysql_error(db));
}
// ADD Rows
printf("adding rows(1):\n ");
if ((mysql_query(db,"insert into users values ( 0,'Heinz',
1,'Personalchef')")) != 0) {
fprintf(stderr, "Failed to iser into table: Error: %s\n", mysql_error(db));
}
printf("adding rows(2):\n ");
if ((mysql_query(db,"insert into users values ( 0,'Paul', 3,'DB-Admin')")) !=
0) {
fprintf(stderr, "Failed to iser into table: Error: %s\n", mysql_error(db));
}
// Load Tables
printf("loading table:\n ");
if ((mysql_query(db,"select user_id, uname, job, typ, buydate from users left
join PC using(pcid)")) != 0) {
fprintf(stderr, "Failed to select Data: Error: %s\n", mysql_error(db));
exit (1);
}
printf("Done:\n ");
result =malloc(sizeof(result));
printf("Storing result:\n ");
if ((result=mysql_store_result(db)) == NULL) {
fprintf(stderr, "Failed to store result: Error: %s\n", mysql_error(db));
exit (7);
}
//Show fields
printf("Showing fields:\n ");
num_fields = mysql_num_fields(result);
fields = mysql_fetch_fields(result);
for(i = 0; i < num_fields; i++)
{
printf("[%s]:\t", fields[i].name);
}
printf("\n");
// Show Tables
free(lengths);
lengths=(unsigned long **)malloc(sizeof(lengths));
//free(result);
result=(MYSQL_RES*)malloc(sizeof(result));
for(i = 0; i < num_fields; i++) lengths[0][i]=0;
j=1;
while ((row[j] = mysql_fetch_row(result)))
{
lengths[j]=mysql_fetch_lengths(result);
j++;
}
jend=j;
for (j=1; j < jend; j++) {
for (i=0; i < num_fields; i++) {
lengths[0][i]= strlen(row[j][i] ? row[j][i] : "NULL");
printf("[%.*s] ", (int) lengths[j][i], row[j][i] ? row[j][i] : "NULL");
printf("%*.0d ", (int)( lengths[0][i]-lengths[j][i]),0);
}
printf("\n");
}
printf("\n");
printf("droping tables:\n ");
if ((mysql_query(db,"drop table users")) != 0) {
fprintf(stderr, "Failed to drop table: Error: %s\n", mysql_error(db));
exit (8);
}
mysql_close(db);
free(result);
free(lengths);
free(last_row);
free(row);
return EXIT_SUCCESS;
}
---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive