栈上分配数组,该怎么处理

栈上分配数组
今天碰到一个面试题,感慨找工作真难,分享给大家:
C/C++ code

#include <iostream> 
using namespace std;

void main()
{
    int** arr=NULL;     //int型二维数组
    int rows,columns;
    cin>>rows;        //2
    cin>>columns;    //3
    
    
    //请在此处编写代码,根据rows和columns在栈上分配一个数组arr
    ...你的代码...
    
    
    //赋值给数组元素
    for (int rowIndex=0;rowIndex<rows;rowIndex++)
    {
        for (int columnIndex=0;columnIndex<columns;columnIndex++)
        {
            arr[rowIndex][columnIndex]=columnIndex+(rowIndex+1)*1000+1;
        }
    }
    
    //打印每个数组元素
    for (rowIndex=0;rowIndex<rows;rowIndex++)
    {
        for (int columnIndex=0;columnIndex<columns;columnIndex++)
        {
            printf("%d ",arr[rowIndex][columnIndex]);
        }
        printf("\n");
    }
}


运行效果:

------解决方案--------------------
这时在栈中分配,有些吓怕人啊[code=C/C#include] <iostream>
using namespace std;

void main()
{
  int* arr=NULL;  //** int型二维数组
  int rows,columns, rowIndex, columnIndex;
  cin>>rows;    //2
  cin>>columns;  //3
  int _esp;
 
 
  //请在此处编写代码,根据rows和columns在栈上分配一个数组arr
  // ...你的代码...
  _asm {  // 为完美计,下面的代码最好对 eax 和 edx 也进行保存和恢复的操作
mov  eax, rows
imul columns
shl  eax, 2
mov _esp, esp
sub  esp, eax
mov  arr, esp
}
 
 
  //赋值给数组元素
  for (int rowIndex=0;rowIndex <rows;rowIndex++)
  {
    for (int columnIndex=0;columnIndex <columns;columnIndex++)
    {
      arr[rowIndex*columns+columnIndex=columnIndex+(rowIndex+1)*1000+1; //**
    }
  }
 
  //打印每个数组元素
  for (rowIndex=0;rowIndex <rows;rowIndex++)
  {
    for (int columnIndex=0;columnIndex <columns;columnIndex++)
    {
      printf("%d ",arr[rowIndex*columns+columnIndex]);  //**
    }
    printf("\n");
  }
  _asm mov esp, _esp  //** 如果没有这个,带堆栈检查的话,程序运行会异常

}[/code]