メモリのブロックを割り当ててから、その領域にデータをコピーしようとしています。この単純なプログラムを作成しましたが、期待どおりの動作をしません。誰かが私の間違った推論を指摘してくれませんか。
ありがとう。
#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 (これは 15 ではなく 22 である必要があります)
みんな助けてくれてありがとう。この演習の要点は、udp を介して別のホストにデータを送信することです。sendto() を呼び出す前に bufptr の内容を見てみると、問題なく送信できているようです。反対側(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));