2014-04-06 21 views
0

你好我有一個問題,當我打電話給函數arrayBigToSmall程序崩潰(輸入數字後)。我想了解爲什麼會發生這種情況,以及我如何解決這個問題。C程序在執行函數時崩潰

碼 -

#include <stdio.h> 
    #include <stdlib.h> 

    int main() 
    { 
    float array[2][3][2]; 
    getNums(array); 
    return(0); 
    } 

    void getNums(float array[2][3][2]) 
    { 
    int i,j,p; 

    printf("Enter numbers: \n"); 
    for(i = 0; i < 2 ; i++) 
    { 
     for(j = 0; j < 3; j++) 
     { 
      for(p = 0; p < 2; p++) 
      { 
       scanf("%f",&array[i][j][p]); 
      } 
     } 
    } 
    arrayBigToSmall(array); 
    } 

    void arrayBigToSmall(float array[2][3][2]) 
    { 

    int i,j,p,k; 
    float array1[12]; 
    float temp; 

    for(i=0; i<3; i++) 
    { 
     for(j=0; j < 2; j++) 
     { 
      for(p = 0; p < 3; p++) 
      { 
       array1[k] = array[i][j][p]; 
       k++; 
      } 
     } 
    } 
    } 
+5

你初始化失敗''中arrayBigToSmall k'()'不大於,j不大於3和。如果編譯時啓用了所有警告,編譯器會告訴你。 – mfro

回答

2

小心陣列中使用的尺寸如下: 作爲陣列的尺寸2 x 3 x 2但在你的代碼是在3 x 2 x 3方式其中溢出利用3個迴路,並且導致崩潰。 你也應該在使用之前使用k

void arrayBigToSmall(float array[2][3][2]) 
{ 

int i,j,p,k=0; 
float array1[12]; 
float temp; 

for(i=0; i<2; i++) 
{ 
    for(j=0; j < 3; j++) 
    { 
     for(p = 0; p <2 ; p++) 
     { 
      array1[k] = array[i][j][p]; 
      k++; 
     } 
    } 
} 
} 
4
for(i=0; i<3; i++) 
{ 
    for(j=0; j < 2; j++) 
    { 
     for(p = 0; p < 3; p++) 
     { 
      array1[k] = array[i][j][p]; 
      k++; 
     } 
    } 
} 
} 

k必須初始化0i應該比2p不大於2