![](/img/trans.png)
[英]method for fastest allocation and free of dynamic sized array object as local variable
[英]Declaring variable sized array without using dynamic memory allocation
我想在函数中分配可变大小的2D数组而不使用new运算符,这样这个2D数组可用于同一文件中的其他函数。
void draw(int i)
{ size=i; }
void assign(char symbol)
{
char one[size][size];
/// ... Assigning values to one ...
}
void display()
{ /// Displaying values of one[size][size]
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
cout<<one[i][j];
cout<<endl;
}
}
函数的执行顺序是draw - > assign - > display
之前可能已经提出过这个问题。 但我的问题是.. - >我无法在全局分配函数之外声明数组,因为大小的值是未知的。 - >我不能在“display”函数中使用“one”数组,因为它的范围仅限于“assign”函数。
而且我也不想使用new或malloc运算符。 如果有其他选择,请提供帮助。
C ++不支持堆栈分配的可变长度数组,例如C99。 你应该使用std::vector<T>
。 如果你真的想使用堆栈分配,你可以使用alloca()
。
没有办法做到这一点。 数组“one”在assign函数的堆栈中是临时的。 离开assign函数时会被破坏。
所以你需要以某种方式分配内存。
如果您一次只使用“one”数组的一个副本,则可以在全局范围内声明它,其空间足够大以获得舒适的上限。 并在每次使用它时检查静态全局数组是否足够大。
你担心表现吗? 或者您是否在无法进行内存分配的平台上?
其他一些选项:静态地在系统外部分配数组,并将其作为参数传递给每个函数。
或者,如果可以从单个更高级别的“所有者”函数调用所有函数,则可以使用“alloca”在堆栈上动态分配数组。
例如
system()
{
char one = alloca( size );
draw( one, ... );
assign( one, ...);
display( one, ... );
}
如果您不想使用动态内存分配,则必须支付分配一些额外内存的成本。 您可以将数组的大小定义为足以处理手头的数据。 喜欢,
int arr[my_limit];
请注意my_limit
必须是常量表达式。
在问题中提到的程序中, 数组'one'的内存需求仅在运行时确定 ,因此使用动态内存分配是一种好习惯。
我对c ++并不完美,实际上我是一个像你这样的新手。 但是我认为你可以通过使用来实现
"*pointer"
我的意思是你应该展示你的阵列的referance。 然后你可以在函数之外使用它。
const int MAX_SIZE = 1000;
char one[MAX_SIZE][MAX_SIZE];
int size = 0; // needs to be smaller than MAX_SIZE
void draw(int i) {
if(i < MAX_SIZE) size=i;
}
void assign(char symbol, i, j)
{
char one[i][j] = symbol;
}
void display()
{
for(int i=0; i<size; i++) {
for(int j=0; i<size; j++) {
cout<<one[i][j];
}
cout<<endl;
}
}
您是否尝试在函数之外定义数组,但是在文件中?
例如:
static unsigned int my_array[16][32];
void my_func()
{
/*...*/
}
int another_func()
{
/*...*/
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.