alloca()在堆栈上而不是在堆上分配内存,如同的情况一样malloc().所以,当我从例程返回时,内存被释放.所以,实际上这解决了我释放动态分配内存的问题.释放分配的内存malloc()是一个令人头痛的问题,如果不知何故错过会导致各种内存问题.
alloca()尽管有上述特征,为什么不鼓励使用?
在C和/或C++中操作动态(所有维度直到运行时才知道)的多维数组的接受/最常用方法是什么.
我正在努力找到完成此Java代码的最简洁方法:
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int rows=sc.nextInt();
int cols=sc.nextInt();
int[][] data=new int[rows][cols];
manipulate(data);
}
public static void manipulate(int[][] data){
for(int i=0;i<data.length;i++)
for(int j=0;j<data[0].length.j++){
System.out.print(data[i][j]);
}
}
Run Code Online (Sandbox Code Playgroud)
(从std_in读取只是为了澄清维度直到运行时才知道).
编辑:我注意到这个问题非常受欢迎,即使它很老了.我实际上并不同意最高投票的答案.我认为C的最佳选择是使用一维数组,如Guge所说:"你可以分配行cols sizeof(int)并通过表[row*cols + col]来访问它."
C++有很多选择,如果你真的喜欢boost或stl,那么下面的答案可能更好,但最简单也可能最快的选择是使用C中的单维数组.
如果你想要[] []语法,那么在C和C++中另一个可行的选择是lillq在底部的答案是手动构建具有大量malloc的数组.
我昨天刚做了一个实验,发现一些令人困惑的事情:
#include <stdio.h>
int main()
{
int j;
scanf("%d",&j);
const int i = j;
int arr[i];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
j从键盘读取数字,它用于arr在堆栈上分配数组.
编译器在编译时甚至不知道数组的大小(将j初始化为0?),但没有编译错误.这怎么可能?