内联汇编程序运行良好,错误:双重自由或损坏(!prev)

时间:2015-04-11 20:20:02

标签: c assembly

我有一个简单的问题。内联汇编程序运行良好。首先,省略了2d数组中的最后一行(我检查了它)。因此我有一个错误"双重免费或腐败(!prev):0x087d7200 ***"。我使用AT& T语法。 32位

#define SIZE2 500

创建数组

 int **dane2 = (int**)malloc(SIZE2 * sizeof(int*));
int i;
for(i=0;i<SIZE2;i++)
{
    dane2[i]=(int*) malloc(SIZE2 * sizeof(int));
}

我使用汇编程序的函数

    void dodaj2(int **dane2)
{
int size;
size = SIZE2;
int i,j;
for(i=0;i<SIZE2;++i)
{
    for(j=0;j<SIZE2;++j)
    {
    //  dane2[i][j] = dane2[i][j]*3 + dane2[i][j] + dane2[i][j]/2 +dane2[i][j]*4;
        asm volatile ( 
        "xor %%eax,%%eax \n\
        xor %%edx, %%edx \n\
        movl %%esi, %%eax \n\
        movl %%edi, %%esi \n\
        mull %%esi \n\
        addl %%ecx, %%eax \n\
        movl (%%ebx,%%eax,4), %%edi \n\
        #int3 \n\
        movl %%edi, %%edx \n\
        shl $3, %%edi \n\
        shr $1, %%edx \n\
        addl %%edx, %%edi \n\
        movl %%edi, (%%ebx, %%eax,4) \n\
        #int3"
        :
        :"S"(i), "c"(j), "b"(*dane2), "D"(size)
        );
    }
}

}

内联汇编程序应该像这一行一样工作:

//dane2[i][j] = dane2[i][j]*3 + dane2[i][j] + dane2[i][j]/2 + dane2[i][j]*4;

我根据模型

计算了元素的地址
dane2(i*(amonut of rows) + j) * 4

可用内存。

int k;
for(k=0;k<SIZE2;k++)
{
    free(dane2[k]);
}
free(dane2);

我不知道错误在哪里。

0 个答案:

没有答案