数组分配不想要的内存

时间:2012-03-26 19:46:25

标签: c

问题陈述:  给定一系列整数。对于每组5个成功元素 (1..5,6..10等)找到最小值并将其放入另一个数组( 长度为初始数组的1/5)。 使用一个函数获取指向5个元素和a的序列的指针 指向存储结果的整数的指针。

void main()
{
int n1,i,z,k;
int v[50],x[10];

printf("length of array:");
scanf("%d" , &n1);

k = -1;

readArray ( n1, v );
for (i=0; i<=n1; i++)
{    
    searchArray ( &k, &v[i], &x[k] );
}
writeArray ( k , x );
}

v [i]是初始数组,x [k]是结果数组,k指向x,其中应该放置结果。

void searchArray ( int *k, int * v, int * x)
{

int i,z;
bool dif;

dif = false;
z = z+1;
if (v[i-1] == (v[i]-1))
{
    dif = true;
    if ((dif == true) && (z == 4))
    {
        *k = *k+1;
        x[*k] = v[i-4];
        z = 0;
        if (v[i]+1 == v[i+1])
        {
            i = i+1;
        }
    } 
}
else if ( dif != true )
     {
         z = 0;
     }
}

问题:对于1到10的数组,结果是x [0] = 134513473 x [1] = 6,如果我看x [-1]是1.所以不要在x [0]中放1它把它放在x [-1]中,x [0]返回内存地址。

1 个答案:

答案 0 :(得分:1)

一个问题是这一行:

z = z+1;

您尚未将z初始化为任何内容,因此之后使用z的所有内容都是使用垃圾。你的下一行是:

if (v[i-1] == (v[i]-1))

由于i未初始化,您正在再次处理垃圾。不是一件幸福的事情。

如果您正确设计,您的函数不需要k作为参数。但是,您需要修改调用,以在数组中传递正确的偏移量。 (目前,你正在扫描0..4,1..5,2..6,而不是0..4,5..9,10..14。)