2012-03-26 97 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。)