Гость Опубликовано 29 января, 2002 Жалоба Поделиться Опубликовано 29 января, 2002 est' code: struct my_first_query { char *static_pre; char *cim; char *my_delimeter; char *e_cim; char *static_after; }; void my_test_query() { struct my_first_query *hui; const char aa[] = "123\0"; const char bb[] = "321\0"; char pizda[255]; int i; hui = malloc(sizeof(struct my_first_query)); if (hui == (struct my_first_query *) NULL) do_error("my_test_query:malloc"); memcpy(hui->static_pre, my_LINE1, strlen(my_LINE1) + 1); memcpy(hui->my_delimeter, my_LINE2, strlen(my_LINE2) + 1); memcpy(hui->static_after, my_LINE3, strlen(my_LINE3) + 1); hui->cim = (char *) &aa; hui->e_cim = (char *) &bb; for (i = 0; i < 2; i++) { strncat((char *)&pizda, *((char **) (hui + i)), strlen(*((char **) (hui + i))) + 1); printf("yy is %s\n", pizda); hui++; } ________________________________________ kak i sleduet ozidat' vse konchaetsya SIGSEGV(om)) vopros vot v chem: esli hui pokazivaet na pervii element v structure, kuda pokazivaet hui+1? gdb SPRAVEDLIVO POKAZIVAET, SHTO hui pokazivaet na pervii element. hui+1 pokazivaet neponyatno kuda. pri etom votroi element nahoditsya mezdu hui i hui+1 (gdb) p hui $15 = (struct my_first_query *) 0x8086128 (gdb) p &hui->static_pre $16 = (char **) 0x8086128 (gdb) p hui+1 $17 = (struct my_first_query *) 0x808613c (gdb) p &hui->cim $18 = (char **) 0x808612c (gdb) voobschem, shto za erunda takay? ili normal'naya ariphmetica s pointerami na structuri ne rabotaet? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 29 января, 2002 Жалоба Поделиться Опубликовано 29 января, 2002 est' code: struct my_first_query { char *static_pre; char *cim; char *my_delimeter; char *e_cim; char *static_after; }; void my_test_query() { struct my_first_query *hui; const char aa[] = "123\0"; const char bb[] = "321\0"; char pizda[255]; int i; hui = malloc(sizeof(struct my_first_query)); if (hui == (struct my_first_query *) NULL) do_error("my_test_query:malloc"); memcpy(hui->static_pre, my_LINE1, strlen(my_LINE1) + 1); memcpy(hui->my_delimeter, my_LINE2, strlen(my_LINE2) + 1); memcpy(hui->static_after, my_LINE3, strlen(my_LINE3) + 1); hui->cim = (char *) &aa; hui->e_cim = (char *) &bb; for (i = 0; i < 2; i++) { strncat((char *)&pizda, *((char **) (hui + i)), strlen(*((char **) (hui + i))) + 1); printf("yy is %s\n", pizda); hui++; } ________________________________________ kak i sleduet ozidat' vse konchaetsya SIGSEGV(om)) vopros vot v chem: esli hui pokazivaet na pervii element v structure, kuda pokazivaet hui+1? gdb SPRAVEDLIVO POKAZIVAET, SHTO hui pokazivaet na pervii element. hui+1 pokazivaet neponyatno kuda. pri etom votroi element nahoditsya mezdu hui i hui+1 (gdb) p hui $15 = (struct my_first_query *) 0x8086128 (gdb) p &hui->static_pre $16 = (char **) 0x8086128 (gdb) p hui+1 $17 = (struct my_first_query *) 0x808613c (gdb) p &hui->cim $18 = (char **) 0x808612c (gdb) voobschem, shto za erunda takay? ili normal'naya ariphmetica s pointerami na structuri ne rabotaet? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 30 января, 2002 Жалоба Поделиться Опубликовано 30 января, 2002 дык, а в чем вопрос-то? операция ++ для типизированных ссылок - увеличение ссылки на sizeof(type). у тебя размер - 0х14, вот и получается hui = 0x8086128, hui++ = 0x8086128 + 0x14. а так как памяти выделенно только на один элемент то при попытке чтения следующего вылазит мой любимый SIGSEGV Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 30 января, 2002 Жалоба Поделиться Опубликовано 30 января, 2002 дык, а в чем вопрос-то? операция ++ для типизированных ссылок - увеличение ссылки на sizeof(type). у тебя размер - 0х14, вот и получается hui = 0x8086128, hui++ = 0x8086128 + 0x14. а так как памяти выделенно только на один элемент то при попытке чтения следующего вылазит мой любимый SIGSEGV Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 31 января, 2002 Жалоба Поделиться Опубликовано 31 января, 2002 spasibo, spasibo. nda, glupo poluchilos'. eto horosho:) poidem drugim putem. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 31 января, 2002 Жалоба Поделиться Опубликовано 31 января, 2002 spasibo, spasibo. nda, glupo poluchilos'. eto horosho:) poidem drugim putem. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.