2012-12-09 2 views
1

이 코드는 3x3 행렬에 대한 행렬식을 찾는 코드입니다 (이 코드는 nxn 행렬을위한 것이지만 샘플의 경우 3x3을 사용했습니다). 재귀 사용 결과가 정상적으로 작동합니다. 하지만이 코드의 오류로 인해 하위 함수 (자체)를 호출하기 전에 printf ("\ n")를 지정해야합니다. 그렇지 않으면 0xc0000fd (스택 오버플로) 오류가 반환됩니다.재귀에서 printf가 아닌 경우 스택 넘침

#include "stdio.h" 
#include "stdlib.h" 
#include "conio.h" 
#define size 3 


void trimarray(int**rrayrc,int**rrayout, int dim,int cuti,int cutj) 
{ 
    int i, j; 
    int ti = 0,tj; 

    for(i = 0; i<dim; i++) 
    { 
     tj = 0; 
     for(j = 0; j< dim; j++) 
     { 
      if(!((i==cuti)||(j==cutj))) 
      { 
        rrayout[ti][tj] = rrayrc[i][j]; 
      } 
      if(j!=cutj) {tj++;} 
     } 
     if(i!=cuti) {ti++;} 
    } 

} 
void initializearray(int** rray,int dim) 
{ 
    int i, j; 
    for(i = 0; i<dim; i++) 
    { 
     for(j = 0; j<dim; j++) 
     { 
      rray[i][j] = 0; 
     } 
    } 
} 
int det(int** rray, int dim) 
{ 
    int i,j; 
    int cut[dim-1][dim-1]; 
    int* cutp[i]; 
    int mul = 1,sum=0; 
    if(dim >1) 
    { 
     for(i = 0; i<dim-1; i++) 
     { 
      cutp[i] = cut[i]; 
     } 
     initializearray(cutp,dim-1); 
     for(i = 0; i<dim; i++) 
     { 
      printf("\n",dim); //<< Without this the program won't work 
      trimarray(rray,cutp,dim,0,i); 
      sum+=det(cutp,dim-1)*mul*rray[0][i]; 
      mul = 0-mul; 
     } 
     return sum; 

    } 
    else 
    { 
     return rray[0][0]; 
    } 
} 
int main() 
{ 
    int test[size][size] = {2,-3,-2,-6,3,3,-2,-3,-2}; 
    int* testpntr[size]; 
    int i,deter; 
    for(i = 0; i<size; i++) 
    { 
     testpntr[i] = test[i]; 
    } 
    deter = det(testpntr,size); 
    printf("[%d]",deter); 
    getch(); 

    return 0; 
} 

답변은 대단히 감사하겠습니다.

답변

2

int* cutp[i];은이 단계에서 i이 초기화되지 않기 때문에 정의되지 않은 동작입니다. cutp 배열의 크기를 알 수 없습니다.

+0

이런 멍청한 실수. 감사합니다 :) –

관련 문제