Я пытаюсь выделить блок памяти, а затем скопировать данные в это пространство. Я сделал эту простую программу, и она не делает того, что я от нее ожидаю. Может ли кто-нибудь указать на мои ошибочные рассуждения.
Спасибо.
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int t1 = 11;
int t2 = 22;
int *bufptr;
bufptr = calloc(2, sizeof(int));
if(bufptr == NULL)
{
fprintf(stderr, "Out of memory, exiting\n");
exit(1);
}
memcpy(bufptr, &t1, sizeof(int));
memcpy((bufptr+sizeof(int)), &t2, sizeof(int));
printf("bufptr11: %d\n", *bufptr);
printf("bufptr22: %d\n", *bufptr+sizeof(int));
}
Он выводит следующее:
bufptr11: 11
bufptr22: 15 (это должно быть 22, а не 15)
Всем спасибо за помощь, но я только что столкнулся с очередной загвоздкой! Весь смысл этого упражнения в том, чтобы отправить некоторые данные через udp на другой хост. Я просматриваю содержимое bufptr перед вызовом sendto(), все выглядит нормально, и отправка проходит успешно. С другой стороны (я запускаю клиент/сервер на 127.0.0.1) я просто получаю "дерьмо". Я вызываю recvfrom(s_fd, bufptr, buflen и т. д.). Я использую тот же вызов calloc для выделения памяти для bufptr. Этот вызов возвращает нужное количество данных, но все это просто мусор!
bufptr = calloc(2, sizeof(int));
if(bufptr == NULL)
{
fprintf(stderr, "Out of memory, exiting\n");
exit(1);
}
buflen = 2*sizeof(int);
rc = recvfrom(sd, bufptr, buflen, 0, (struct sockaddr *)&serveraddr, &serveraddrlen);
printf("t2: %d\n", *bufptr);
printf("t3: %d\n", *(bufptr+1));
main
возвращаетint
. Всегда. Все остальное может привести к неопределенному поведению. Возможно, это ваша проблема. ;-) - person Thomas Matthews   schedule 03.02.2010