【问题标题】:stack overflow unless printf under recursion堆栈溢出,除非 printf 在递归下
【发布时间】:2012-11-27 03:59:12
【问题描述】:

下面的代码是用于查找 3x3 矩阵的行列式的代码(此代码适用于 nxn 矩阵,但对于示例,我使用了 3x3),使用递归 结果工作正常,但我想知道这段代码中的哪些错误使这必须是调用子函数(本身)之前的 printf("\n") ,否则它将返回错误 0xc0000fd(堆栈溢出)。

#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;
}

我们将不胜感激。

【问题讨论】:

    标签: c recursion printf stack-overflow


    【解决方案1】:

    int* cutp[i]; 是未定义的行为,因为 i 在此阶段未初始化。你不知道cutp 数组的大小。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 2017-01-20
      • 2018-12-02
      • 2017-09-06
      • 2019-07-08
      • 2015-08-05
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多