使用这些二维数组(C+;+;)时,我的内存是否用完了? 我尝试将这个C++代码作为Windows控制台应用程序运行,但是当它启动时,它立即关闭,只给我一个标准“程序已经停止工作”Windows通常给我的错误。
程序的主要功能是(后面省略了一点额外的代码):使用这些二维数组(C+;+;)时,我的内存是否用完了? 我尝试将这个C++代码作为Windows控制台应用程序运行,但是当它启动时,它立即关闭,只给我一个标准“程序已经停止工作”Windows通常给我的错误。,c++,memory,multidimensional-array,crash,stack-overflow,C++,Memory,Multidimensional Array,Crash,Stack Overflow,程序的主要功能是(后面省略了一点额外的代码): intmain(){ cout堆栈的大小比堆的大小小得多。使用new或malloc分配的任何内容都会放在堆上,但如果不小心,可以非常快地填充堆栈 考虑到这个网站,你可能会因为这么多大的数组而导致堆栈溢出 要执行此操作,请尝试以下代码: #include <iostream> int main(int argc, char* argv[]) { int sarr2d[5][10]; typedef int dimension[10];
intmain(){
cout堆栈的大小比堆的大小小得多。使用new
或malloc
分配的任何内容都会放在堆上,但如果不小心,可以非常快地填充堆栈
考虑到这个网站,你可能会因为这么多大的数组而导致堆栈溢出
要执行此操作,请尝试以下代码:
#include <iostream>
int main(int argc, char* argv[])
{
int sarr2d[5][10];
typedef int dimension[10];
dimension* arr2d = new dimension[5];
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
sarr2d[i][j] = i*j;
}
}
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
arr2d[i][j] = i*j;
}
}
// print it out
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
std::cout << arr2d[i][j] << " ";
}
std::cout << "\n";
}
delete [] arr2d;
return 0;
}
#包括
int main(int argc,char*argv[])
{
int sarr2d[5][10];
typedef int-dimension[10];
尺寸*arr2d=新尺寸[5];
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
sarr2d[i][j]=i*j;
}
}
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
arr2d[i][j]=i*j;
}
}
//打印出来
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
std::cout堆栈的大小比堆的大小小得多。使用new
或malloc
分配的任何内容都会放在堆上,但如果不小心,可以非常快速地填充堆栈
考虑到这个网站,你可能会因为这么多大的数组而导致堆栈溢出
要执行此操作,请尝试以下代码:
#include <iostream>
int main(int argc, char* argv[])
{
int sarr2d[5][10];
typedef int dimension[10];
dimension* arr2d = new dimension[5];
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
sarr2d[i][j] = i*j;
}
}
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
arr2d[i][j] = i*j;
}
}
// print it out
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 10; j++)
{
std::cout << arr2d[i][j] << " ";
}
std::cout << "\n";
}
delete [] arr2d;
return 0;
}
#包括
int main(int argc,char*argv[])
{
int sarr2d[5][10];
typedef int-dimension[10];
尺寸*arr2d=新尺寸[5];
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
sarr2d[i][j]=i*j;
}
}
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
arr2d[i][j]=i*j;
}
}
//打印出来
对于(int i=0;i<5;i++)
{
对于(int j=0;j<10;j++)
{
std::cout如果您确实想要堆栈上的项目,如果您使用的是Microsoft编译器,则可以使用/F开关,或者您可以在链接程序时指定堆栈的大小。我可能会使用/F开关。但是,这可能会占用堆空间(同时限制堆栈和堆)
以下是MSDN上有关增加堆栈大小的链接:
如果您确实想要堆栈上的项目,如果您使用的是Microsoft编译器,则可以使用/F开关,或者您可以在链接程序时指定堆栈的大小。我可能会使用/F开关。但是,这可能会占用堆空间(限制堆栈和堆在一起)
以下是MSDN上有关增加堆栈大小的链接:
堆栈大小通常被限制为一个相当小的默认大小。如果您需要一个更大的堆栈,通常可以告诉链接器(以系统特定的方式)
在这种特殊情况下,您还可以选择在main
函数之外的静态内存空间中分配变量。该空间通常比堆栈空间大得多
int fract[501][501];
int rfract[501][501];
int nufract[501][501];
int nurfract[501][501];
int snufract[501][501];
int snurfract[501][501];
int main() {
cout << "FIRST LINE";
system("PAUSE");
return 0;
}
int fract[501][501];
国际合同[501][501];
国际货币基金组织[501][501];
国际货币基金组织[501][501];
int snufract[501][501];
int snurfract[501][501];
int main(){
cout堆栈大小通常被限制为一个相当小的默认大小。如果您需要一个更大的堆栈,您通常可以告诉链接器(以系统特定的方式)
在这种特殊情况下,您还可以选择在main
函数之外的静态内存空间中分配变量。该空间通常比堆栈空间大得多
int fract[501][501];
int rfract[501][501];
int nufract[501][501];
int nurfract[501][501];
int snufract[501][501];
int snurfract[501][501];
int main() {
cout << "FIRST LINE";
system("PAUSE");
return 0;
}
int fract[501][501];
国际合同[501][501];
国际货币基金组织[501][501];
国际货币基金组织[501][501];
int snufract[501][501];
int snurfract[501][501];
int main(){
您可以尝试在运行时分配它们;堆通常比堆栈大得多。您可以尝试在运行时分配它们;堆通常比堆栈大得多。