Вообщем тут наткнулся на непонятное мне явление, я не отрицаю что мог где то ошибится, но никак не могу понять где, вот код: #include <iostream> #include <cstdlib> #include <mysql/mysql.h> #include <iostream> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> using namespace std; MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; struct r{ char **rez; } *get; int num; //Connection to server and to database bool conn(char *hostname, char *username, char *passwd, char *dbname, int port) { mysql_init(&mysql); if(!(mysql_real_connect(&mysql,hostname,username,passwd,dbname,port,0,0))){ fprintf(stderr, "%s\n", mysql_error(&mysql)); return false; } if(mysql_select_db(&mysql,dbname)){ fprintf(stderr, "%s\n", mysql_error(&mysql)); return false; } return true; } //Query to database bool query(char **rez, char *str) { int i, l = 0; if(mysql_query(&mysql,str)){ fprintf(stderr, "%s\n", mysql_error(&mysql)); return false; } if(!(res = mysql_store_result(&mysql))){ if(rez) fprintf(stderr, "%s\n", mysql_error(&mysql)); return false; } while((row = mysql_fetch_row(res))){ for (i=0 ; i < mysql_num_fields (res); i++){ rez[l] = new char[strlen(row[i])]; rez[l] = strcpy(rez[l],row[i]); l++; } } if(!mysql_eof(res)){ fprintf(stderr, "%s\n", mysql_error(&mysql)); return false; } mysql_free_result(res); return true; } void out() { int fd = open("/home/cyclon/out.html", O_WRONLY | O_CREAT); chmod("/home/cyclon/out.html", S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP); for(int n = 0; n < num; n++){ cout << get[0].rez[n] << "\n"; write(fd,get[0].rez[n],strlen(get[0].rez[n])); write(fd,"<br>",strlen("<br>")); } close(fd); } int main(int argc, char *argv[]) { get = new r[1]; conn("localhost","user","pass","gendw", 3306); get[0].rez = new char*[1]; query(get[0].rez,"select count(*) from content;"); num = atoi(get[0].rez[0]); delete get[0].rez[0], get[0].rez; get[0].rez = new char*[num]; query(get[0].rez,"select word from content;"); out(); for(int i = 0; i < num; i++){ // delete get[0].rez[i]; } delete get[0].rez; cout << "Done!" << endl; return EXIT_SUCCESS; } Ошибка в следующем, в выходном файле, начиная с 1000-го элемента в конце каждой строки добивает один лишний символ (мусор), а к последнему элементу два символа. Причём это не зависит от их количества, главное что бы их было больше 1000, может быть и 5000 и 10000, всегда одно и тоже, один лишний символ после тысячной строки и два на последней. Как мне кажется я где то накосячил с выделением памяти, но не могу понять где именно. Строка: // delete get[0].rez[i]; закоменчена поскольку на ней происходит падение проги с сообщением об ошибке во free , потому убрал что бы каждый раз не валилась, хотя это первое что натолкнуло меня на ошибку. Собсно она и есть следствие не правильного выделения памяти. Заранее спасибо!!!
Ответ на:
комментарий
от RomanU
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от syomin
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Segmentation fault (2009)
- Форум си, mysql, указатель на возвращаемую строку. почему си так себя ведет (2019)
- Форум MYSQL и C API (2007)
- Форум Как узнать у long long числа количество цифр? (2021)
- Форум socket with function mysql (2009)
- Форум Segmentation fault (C & Mysql) (2007)
- Форум Как c помощью libcurl отправить POST строку в юникоде. (2015)
- Форум c и iconv - помогите разобраться (2008)
- Форум Mysq cppconn (2010)
- Форум Проблема с деструктором класса (2002)