相关疑难解决方法(0)

为什么使用alloca()不被视为良好做法?

alloca()在堆栈上而不是在堆上分配内存,如同的情况一样malloc().所以,当我从例程返回时,内存被释放.所以,实际上这解决了我释放动态分配内存的问题.释放分配的内存malloc()是一个令人头痛的问题,如果不知何故错过会导致各种内存问题.

alloca()尽管有上述特征,为什么不鼓励使用?

c malloc stack allocation alloca

381
推荐指数
18
解决办法
12万
查看次数

如何在C/C++中最好地处理动态多维数组?

在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的数组.

c c++ arrays multidimensional-array

25
推荐指数
5
解决办法
3万
查看次数

C中堆栈上的动态数组分配

我昨天刚做了一个实验,发现一些令人困惑的事情:

#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?),但没有编译错误.这怎么可能?

c c99 variable-length-array c11

8
推荐指数
2
解决办法
1万
查看次数