malloc で確保した領域は、使用しなくなったら
free で解放するのがお行儀のよい作法です。
そのためには、malloc で確保した領域へのポインタは
++ などで変更しないほうが良いと思います。
src は、tmp に退避してあとで元に戻しているのでいいんですが、
dst は、++ で 10回変更されたままなので、これを free には
そのままでは使えません。
free(dst - 10); ならいいんでしょうが。
プログラムを次のようにしたほうが良いのではありませんか。
コード:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
int *src, *dst, *tmp;
int i1;
src = malloc(sizeof(int)*10);
dst = malloc(sizeof(int)*10);
tmp = src;
for (i1 = 0; i1 < 10; i1++)
*tmp++ = i1;
printf("1.");
tmp = src;
for (i1 = 0; i1 < 10; i1++)
printf("[%d]", *tmp++);
printf("\n2.");
memcpy(dst, src, sizeof(int)*10);
tmp = dst;
for (i1 = 0; i1 < 10; i1++)
printf("[%d]", *tmp++);
free(src);
free(dst);
return 0;
}
malloc が失敗したかどうかを調べて、その対応を
入れておくともっとお行儀が良いでしょう。