2014-09-02 2 views
-4
#include <iostream> 
int *parray(int a[100][100],int m , int n) 
{ int b[200],i, t , j; 
    i = 1; 
    j = t = 0; 
    for(int i = 0; i < m ; i++) 
    for(int j = 0; j < n ; j++) 
    b[t++] = a[i][j]; 

    //  for(int i = 0; i < m*n ; i++)  
    //  std::cout<<b[i]<<' '; 
    return b; 
} 

int main() 
{ 
    int a[100][100],m,n,*b; 
    std::cin>>m>>n; 

    for(int i = 0; i < m ; i++) 
    for(int j = 0; j < n ; j++) 
    std::cin>>a[i][j]; 

    b = parray(a,m,n); 

    for(int i = 0; i < m*n ; i++) 
    std::cout<<b[i]<<' '; 

    return 0; 
} 

출력두 번째 케이스에서 코드가 작동하는 이유는 무엇입니까?

 1 2 612675848 32767 

 2 2 1 2 3 4 

이다 입력되면하지만 제거해 둘은 "//"그냥 parray() 함수의 리턴 전에 출력된다 :

 1 2 3 4 1 2 3 4 

누군가 전달하기 전에 값을 인쇄 할 때 코드가 작동하는 이유를 알려주실 수 있습니까?

+1

'int b [200]'200은 충분히 커지지 않을 것입니다. 'int b [10000]'이어야합니다. – scohe001

+0

두 번째로 작동하는 이유를 알고 싶습니다. – jymspaul

답변

0

int b[200]parray()parray()에 국한되어 있습니다. 함수 반환에서 스택에서 제거됩니다 (범위가 끝나면).

나중에 main()에 액세스하면 정의되지 않은 동작이 발생합니다.

+0

고맙습니다. 그런데 왜 2 번째로 작동합니까? – jymspaul

+0

@jymspaul 우연히. – Overv

+0

댓글을 삭제할 때, '/ /','b []'를'parray()'에 출력합니다. 이것은 여전히 ​​메모리에 있기 때문에 무엇이 들어 있는지 보여줍니다. –

관련 문제