2012-03-26 99 views
-1

问题说明: 给定一个整数序列。对于每组5个连续元素 (1..5,6..10等)找到最小值并将其放入另一个数组(距离初始数组的距离为1/5的 )。 使用一个函数,该函数获取指向5个元素序列的指针和指向将存储结果的整数的指针。数组分配不想要的内存

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。所以,而不是把1的在x [0]中,它将它放在x [-1]中,并且x [0]返回内存地址。

+1

AH,[tag:homework ]! ** plz-send-me-teh-codez ** – karlphillip 2012-03-26 19:47:30

+0

当有特定问题需要报告时,请回来一个新问题。 plz-send-me-teh-codez类型的问题不适合我们的网站。 – karlphillip 2012-03-26 19:49:11

回答

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。)