Перейти к содержанию

pointer++


Гость

Рекомендуемые сообщения

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)Smile)

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?

Ссылка на комментарий
Поделиться на другие сайты

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)Smile)

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?

Ссылка на комментарий
Поделиться на другие сайты

дык, а в чем вопрос-то?

операция ++ для типизированных ссылок - увеличение ссылки на sizeof(type).

у тебя размер - 0х14, вот и получается hui = 0x8086128, hui++ = 0x8086128 + 0x14.

а так как памяти выделенно только на один элемент то при попытке чтения следующего вылазит мой любимый SIGSEGV Smile

Ссылка на комментарий
Поделиться на другие сайты

дык, а в чем вопрос-то?

операция ++ для типизированных ссылок - увеличение ссылки на sizeof(type).

у тебя размер - 0х14, вот и получается hui = 0x8086128, hui++ = 0x8086128 + 0x14.

а так как памяти выделенно только на один элемент то при попытке чтения следующего вылазит мой любимый SIGSEGV Smile

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...