Realloc改变了值,为什么?

时间:2014-06-09 20:46:30

标签: c

int **arkadas;
int **komsu;

komsu = malloc( t*sizeof( int* ));
arkadas = malloc( t*sizeof( int* ));

for(i=0; i<t; i++)
{
    x=0;
    komsu[i] = malloc( t*sizeof(int) );
    arkadas[i] = malloc( t*sizeof(int) );//temporary malloc

    for(j=0; j<t; j++)
    {
        komsu[i][j]=fark(kelime[i],kelime[j]);
        if(komsu[i][j]==1)
        {
            komsuSayisi++;
            x++;
            arkadas[i][x]=j;
        }
    }
    if(i==2)
    {
        printf("1. value: %d\n",arkadas[2][2]);
    }
    arkadas[i][0]=x+1;//size here
    if(i==2)
    {
        printf("2. value: %d\n",arkadas[2][2]);
    }
    arkadas[i] = (int *)realloc(arkadas[i],x+1);
    if(i==2)
    {
        printf("3.value: %d\n",arkadas[2][2]);
    }
}

输出是:

1. value: 150
2. value: 150
3. value: 13243564 (after realloc)

我想将矩阵转换为简单矩阵,丢失0komsu的矩阵。仅在arkadas 1个。但正如您所看到的,在realloc值发生变化之后。只有一个和第二个数组保持不变。

1 个答案:

答案 0 :(得分:3)

malloc一样,当您致电realloc时,您应该将元素数乘以元素的大小(在这种情况下为sizeof(int)