Я пытаюсь выделить блок памяти, а затем скопировать данные в это пространство. Я сделал эту простую программу, и она не делает то, что я ожидаю. Может ли кто-нибудь указать на мои ошибочные рассуждения.
Спасибо.
#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));