我在这段代码中找不到错误,我看了好几个小时...... Valgrind 说:
==23114== Invalid read of size 1
==23114== Invalid write of size 1
我尝试使用一些 printfs 进行调试,我认为错误出在此函数中。
void rdm_hide(char *name, Byte* img, Byte* bits, int msg, int n, int size)
{
    FILE *fp;
    int r;/
    Byte* used;
    int i = 0, j = 0;
    int p;
    fp = fopen(name, "wb");
    used = malloc(sizeof(Byte) * msg);
    for(i = 0; i < msg; i++)
        used[i] = -1;
    while(i < 3)
    {
        if(img[j] == '\n')
            i++;
        j++;
    }
    for(i = 0; i < msg; i++)
    {
        r = genrand_int32();
        p = r % n;
        if(!search(p, used, msg))
        {
            used[i] = (Byte)p;
            if(bits[i] == (Byte)0)
                img[j + p] = img[j + p] & (~1);
            else if(bits[i] == (Byte)1)
                img[j + p] = img[j + p] | 1;
        }
        else
            i --;
    }
    for(i = 0; i < size; i++)
        fputc( (char) img[i], fp);
    fclose(fp);
    free(used);
}
感谢帮助!