PDA

View Full Version : مشکل با تخصیص و مقدار دهی حافظه 2بعدی ‍‍‍‍‍‍‍‍‍‍‍‍پویا



alireza976
چهارشنبه 08 تیر 1390, 12:30 عصر
سلام

من تو این کد میخوام تمام مقدارهای یک جدول از mysql رو گرفته و داخل یک حافظه 2بعدی ‍‍‍‍‍‍‍‍‍‍‍‍پویا بریزم.
برنامه بدون خطا کامپایل میشه و عمل خوندن اطلاعات هم به درستی انجام میشه ولی هنگامی که مقدارهای وارد شده به آرایه رو چاپ میکنم مقدارها درست نیستند.
مشکل یا از تخصیص حافظه ویا از ورود اطلاعات به آرایه میتونه باشه
کسی میتونه برای حل مشکل کمکم کنه؟ ممنون
این هم کد :


#include <stdio.h>
#include <mysql/mysql.h>
#include <mysql/errmsg.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char **argv)
{

MYSQL *conn;
MYSQL_RES *result;
MYSQL_ROW row;
//char myquery[300]="SELECT * FROM userstable;",
char myquery[300]="select * from pageinfo;",
show_rows[300];


int logi=0;
//int *logregmask; //array
char *logregmask; //array

char** array;
int i,
x,
j=0,
num_fields,
num_rows=0,
u=0;

//conn = mysql_init(NULL)
if((conn=mysql_init(NULL))==NULL)
{
printf("\nFailed to initate MySQL connection");
// exit(1);
}

if (!mysql_real_connect(conn,"127.0.0.1","root","1","aaaa",0,"/var/run/mysqld/mysqld.sock",0))
{
printf( "Failed to connect to MySQL: Error: %s\n", mysql_error(conn));
// exit(1);
}

printf("\nLogged on to database sucessfully\n\n");
printf("\n\n%s\n\n", myquery);
if (mysql_query(conn,myquery))
{
printf("\n\nQuery error.\n\n");
}
else
{ //Query OK.
result = mysql_store_result(conn); //unsigned int num_fields;
num_rows=mysql_num_rows(result); //Returns the number of rows in the result set.
num_fields = mysql_num_fields(result); //Returns the number of columns in a result set.

array=(char **) malloc(num_rows*sizeof(char));
// array=(char **) malloc(num_rows*sizeof(char *));
// while(j<(num_rows*num_fields))
// while(j<(num_rows))
while(j<100)
{
array[j]=(char *)malloc(60*sizeof(char));
j++;
}

while((row = mysql_fetch_row(result)))
{
printf("\n111111111");
unsigned long *lengths;
lengths = mysql_fetch_lengths(result); //Returns the lengths of the columns of the current row within a result set

for(i = 0; i < num_fields; i++)
{
// printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
sprintf(array[u],"%s",row[i]);
u++;
printf("%s\t",array[u]);
}
printf("\n");
// printf("\n333333333");
}

printf("\nbbbbbbbbbb");

// for(x=0;x<6;x++)
// {
// printf("%s",array[x]);
// printf("\n");
// }

printf("\ncccccccccc");
//////////////////////////////////////////////////////////////

printf("\n\nFetched ok\n\n");
mysql_free_result(result);
}
mysql_close(conn);
}

alireza976
چهارشنبه 08 تیر 1390, 12:37 عصر
وقتی در خط 77 یک printf برای شمارش تعداد دفعات تکرار میزارم نشون میده که برای خط اول جدول تمام فیلدها گرفته میشه ولی بار دوم که while اجرا میشه تنها 6 بار از 8 بار اجرا میشه و بعد ارور segmentation fault میده