Realloc更改值,为什么?

Realloc更改值,为什么?,c,C,我想把一个矩阵转换成简单的矩阵,在komsu中去掉0。在arkadas中,仅1个。但正如您所看到的,在realloc之后,值发生了变化。只有一个和第二个数组保持不变。就像使用malloc一样,当您调用realloc时,您应该将元素的数量乘以元素的大小(在这种情况下sizeof(int)您的代码不可读。请正确设置格式。问题在于您正在读取数组的末尾。从根本上说,您的问题不是代码不工作,而是无法进行编码。您不能这样继续。您没有成功的希望。您需要以清晰的结构化方式组织代码。您的分配到处都是。在您学会一些

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

就像使用
malloc
一样,当您调用
realloc
时,您应该将元素的数量乘以元素的大小(在这种情况下
sizeof(int)

您的代码不可读。请正确设置格式。问题在于您正在读取数组的末尾。从根本上说,您的问题不是代码不工作,而是无法进行编码。您不能这样继续。您没有成功的希望。您需要以清晰的结构化方式组织代码。您的分配到处都是。在您学会一些基本的编程组织技能之前,您最好使用更高级的语言。谢谢大家。这是我的错误。除非是
sizeof(char)
,这是多余的。备选方案:使用
arkadas[i]=(int*)realloc(arkadas[i],x+1);
,乘以*目标的大小。更易于维护并避免
sizeof(char)
问题:
arkadas[i]=realloc(arkadas[i],(x+1)*sizeof*(arkadas[i]);
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)