- Глючит прога, XMan, 23:18 , 06-Фев-05 (1)
- Глючит прога, rlynx, 23:38 , 06-Фев-05 (2)
- Глючит прога, XMan, 03:54 , 07-Фев-05 (3)
- Глючит прога, rlynx, 04:00 , 07-Фев-05 (4)
- Глючит прога, Xenu, 06:13 , 07-Фев-05 (5)
>>Ну тогда что есть s_users[] и какова длина буфера line. Особенно последнее. >> >> >>Кстати, а где изменяется u_index ? :) > >Я творчески порезал :-) Он увеличивается, это я тебя могу заверить, проверял, >дебажил :-) > char s_users[4][128]; > char line[128]; > > u_index++ у меня стоит в цикле while, не работает просто как >раз именно этот кусок. а что вообще этот код должен делать? нет не в общем, а по шагам. TData_LoginInfo *strLogin; объявили указатель на структуру strLogin=(TData_LoginInfo*) malloc(sizeof(strLogin)); выделили память под структуру, но размером с указатель. На это уже внимание обратили. if((fd = fopen("rreg51.lst", "r"))!=NULL) { открыли файл на чтение и проверили, что открылось fFinish = fopen(fOut, "w" ); открыли файл на запись, но не проверили. может быть позже есть проверка while((fgets(line,100,fd )!=NULL) && (u_index<8100)) { читаем из файла по строкам, пока есть что читать и индекс не превысил 8100 sscanf(line,"%s\t%s\t%s\t%s", s_users[0], s_users[1], s_users[2], s_users[3]); распихали прочитанное по массиву строк. strLogin=(TData_LoginInfo*) realloc(strLogin, sizeof(strLogin)); перевыделили память под структуру, но опять размером с указатель strLogin[u_index].login=atoi(s_users[0]); записываем хрен знает куда, потому что память выделена на 4 байта, примем что размер указателя 4 байта, а конструкция strLogin[u_index] подразумевает, что по strLogin выделена память под u_index * sizeof(структуры) как минимум. }
- Глючит прога, rlynx, 19:31 , 09-Мрт-05 (6)
- Глючит прога, XMan, 20:47 , 09-Мрт-05 (7)
- Глючит прога, rlynx, 21:11 , 09-Мрт-05 (8)
- Глючит прога, XMan, 23:32 , 09-Мрт-05 (9)
- Глючит прога, rlynx, 00:35 , 10-Мрт-05 (10)
- Глючит прога, rlynx, 01:08 , 10-Мрт-05 (11)
- Глючит прога, Xenu, 03:38 , 10-Мрт-05 (12)
>Блин, под виндами все ок, а под юниксами: >bash-3.00# ./_check >_check in realloc(): warning: junk pointer, too high to make sense а вы man realloc смотрели ? realloc() changes the size of the memory block pointed to by ptr to size bytes. The contents will be unchanged to the minimum of the old and new sizes; newly allocated memory will be uninitialized. If ptr is NULL, the call is equivalent to malloc(size); if size is equal to zero, the call is equivalent to free(ptr). Unless ptr is NULL, it must have been returned by an earlier call to malloc(), calloc() or realloc(). If the area pointed to was moved, a free(ptr) is done. то есть память должна быть уже выделена по передаваемому указателю или если еще не выделили то указатель должен быть NULL.
- Глючит прога, XMan, 15:06 , 10-Мрт-05 (13)
|