我有一个简单的问题。内联汇编程序运行良好。首先,省略了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);
我不知道错误在哪里。