Всем привет!
Какой-то глупый затык, но в голову ничего не лезит, уже 2 дня ничего не могу понять.
Есть код:/************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <syslog.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>char ch_main_error[255]; //Error messages
int i_ini_file; //ID of ini-filechar ch_read_data_[1]; // Temporary variable for reading simbols from ini-file
char ch_read_data[255]; // Variable for buildinf string
int i_read_count; // Count of readed simbolstypedef struct{
char ch_string[255];
int i_type; /*0 - section, 1 - key, 2 - comment, 3 - empty string */
char ch_sec_name[20];
char ch_name[20];
char ch_value[255];
} str_ini_data;//int y;
str_ini_data s_ini_data;
int iReadIniFile(char* ch_ini_file){int i_num = 0;
i_read_count = 0;
strcpy(ch_read_data,"");
strcpy(ch_read_data_,"");if ((i_ini_file = open(ch_ini_file, O_RDONLY)) < 0 ){
strcpy(ch_main_error,"IniParser:iReadIniFile: Can't open file.");
return -1;
}str_ini_data *ptr_ini_data;
ptr_ini_data = &s_ini_data;
ptr_ini_data = (str_ini_data *) malloc(sizeof(str_ini_data));
while(i_read_count = read(i_ini_file,ch_read_data_,1)){
if (ch_read_data_[0] == '\n'){
ptr_ini_data = (str_ini_data *) reallocf(ptr_ini_data,(sizeof(str_ini_data)));
stpcpy(ptr_ini_data[i_num].ch_string, ch_read_data);
/*****/ printf("");
strcpy(ch_read_data,"");
strcpy(ch_read_data_,"");
i_num++;
}
strncat(ch_read_data,ch_read_data_,1);
}free (ptr_ini_data);
return 0;
}int main(){
strcpy(ch_main_error,"");
printf("%i\n%s\n",iReadIniFile("./lib.ini"),ch_main_error);
return 0;
}/************************************************************/
Со строчкой printf(""); все работает, вопросов не возникает. Но как только каментю ее -- прога вылетает с созданием core-файла. Парни, подскажите, в чем проблема???? Может сама логика увеличения памяти под структуру неверная???
Еще вопрос: подскажите чем на FreeBSD кору разобрать удобно?
Заранее, огромное спасибо.
> ptr_ini_data = (str_ini_data *) malloc(sizeof(str_ini_data));
> ptr_ini_data = (str_ini_data *) reallocf(ptr_ini_data,(sizeof(str_ini_data)));Твои "sizeof(str_ini_data)" делают совсем не то, что тебе хотелось бы.
Размер "не тот", размер не увеличивается.> stpcpy(ptr_ini_data[i_num].ch_string, ch_read_data);
"strcpy"? Индекс массива "не там": что-нибудь вроде ptr_ini_data->ch_string[i_num]
, судя по телепатическим обрывкам, доносящимся....>Парни, подскажите, в чем проблема????
Каша в голове ==>
|Наверное, потому, что он выполняет то, что ты _написал_, а то,
|что ты написал -- "не совсем то, что ты хотел", чтобы "он выполнял"?
(тм) %) http:/openforum/vsluhforumID9/7184.html#1> Может сама логика увеличения памяти под структуру неверная???
Логика-то, может быть, и верная -- только её ещё надо "в компилятор"
вложить, а он уж точно _тупая_ "железка" и телепатией зе занимается.>Заранее, огромное спасибо.
И Вам - пожалуйста.
Все равно не понятно :о(
Давайте я по-другому спрошу:
есть структура, объявленная типом. Нужно создать массив этого типа, заполнить его, динамически увеличивая его размер. К примеру:typedef struct{
char str1[255];
char str2[255];
} my_type;my_type my_array[1];
Как динамчески увеличивая размерность my_array[] заполнить его?
>typedef struct{
> char str1[255];
> char str2[255];
>} my_type;А ты точно хочешь использовать такие строки? char blah[255]? Я думаю что гораздо полезнее будет просто char *blah
>
>my_type my_array[1];
>
>Как динамчески увеличивая размерность my_array[] заполнить его?Уже никак. Если это глобальнео объявление -- my_array распределился в статической памяти. Если внутри функции -- то в автоматической.
Вообще нужно так:
my_type *my_array;
int elements;elements = 10;
my_array = (my_type *) malloc(sizeof(my_type) * elements);
...
elements += 5;
my_array = (my_type *) realloc(sizeof(my_type) * elements);
Ваш код ужасен... :-( Советую для начала прочитать хотя бы Кернигана и Ритчи.
а, Еще лучше, использовать динамику STL
>а, Еще лучше, использовать динамику STLАга, и совсем ничего, что это из другого языка...