声明变量大小数组,而无需使用动态内存分配
Declaring variable sized array without using dynamic memory allocation
我想在函数中分配变量大小的2D数组,而无需使用新操作符,以便该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;
}
}
绘制函数的执行顺序 ->分配 -> display
这个问题可能早些时候提出了。但是我的问题是.. ->我无法在全球分配函数外部分配函数,因为大小的价值尚不清楚。 ->我无法使用"显示"功能中的"一个"数组,因为它的范围仅限于"分配"函数。
,我也不想使用新的或malloc操作员。如果有其他替代方案,请提供帮助。
c 不支持堆栈分配的变量长度数组,例如C99。您应该改用std::vector<T>
。如果您真的想使用堆栈分配,则可以使用alloca()
。
无法做到这一点。数组"一个"是分配函数中堆栈上的临时性。每当您离开分配功能时,它就会被销毁。
因此您需要以某种方式分配内存。
如果您一次只使用"一个"阵列的一个副本,则可以在全球范围内声明它,其空间足够大,可以舒适地上限。并在每次使用它时检查静态全局阵列足够大。
您的关注表现吗?还是您在不可能的内存分配的平台上?
其他一些选项:从静态分配系统外部的数组,并将其作为参数传递给每个函数。
或所有功能都可以从单个更高级别的"所有者"函数调用,您可以用" Alloca"在堆栈上动态分配数组。
,例如
system()
{
char one = alloca( size );
draw( one, ... );
assign( one, ...);
display( one, ... );
}
如果您不想使用动态内存分配,则必须支付分配一些比所需的内存的费用。您将数组的大小定义为足够大以处理手头的数据。喜欢,
int arr[my_limit];
请注意,my_limit
必须是恒定的表达式。
在问题中提到的程序中,仅在运行时确定数组"一个"的内存需求,因此最好使用动态内存分配。
<</p>我在C 方面并不完美,实际上我是像您这样的新手。但是我认为您可以使用
来做到这一点"*pointer"
我的意思是您应该显示阵列的引用。然后,您可以在功能之外使用它。
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()
{
/*...*/
}
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存