相关疑难解决方法(0)

如何使用new在C++中声明二维数组?

如何使用new声明二维数组?

就像,对于"普通"数组,我会:

int* ary = new int[Size]
Run Code Online (Sandbox Code Playgroud)

int** ary = new int[sizeY][sizeX]
Run Code Online (Sandbox Code Playgroud)

a)不工作/编译和b)没有完成什么:

int ary[sizeY][sizeX] 
Run Code Online (Sandbox Code Playgroud)

确实.

c++ arrays multidimensional-array dynamic-allocation

496
推荐指数
14
解决办法
87万
查看次数

如何在C中正确设置,访问和释放多维数组?

关于C中的多维数组,我已经看过几十个关于"我的代码有什么问题"的问题.出于某种原因,人们似乎无法理解这里发生的事情,所以我决定回答这个问题作为对其他人的参考:

如何在C中正确设置,访问和释放多维数组?

如果其他人有有用的建议,请随时发布!

c malloc dynamic multidimensional-array

24
推荐指数
3
解决办法
5435
查看次数

如何为2D阵列动态分配连续的内存块

如果我像这样分配一个2D数组[N] [N] ; 它将分配一个连续的内存块.

但是,如果我尝试动态这样做:

int **a = malloc(rows * sizeof(int*));
for(int i = 0; i < rows; i++) 
   a[i] = malloc(cols * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这样可以在行中的元素之间保持单位跨度,但行之间可能不是这种情况.

一种解决方案是从2D转换为1D,除此之外,还有另一种方法吗?

c arrays multidimensional-array

18
推荐指数
3
解决办法
1万
查看次数

`sizeof`的操作数是用VLA评估的吗?

这个答案的评论部分中的一个论点促使我提出这个问题.

在以下代码中,bar指向可变长度数组,因此sizeof在运行时而不是编译时确定.

int foo = 100;
double (*bar)[foo];
Run Code Online (Sandbox Code Playgroud)

该论点是关于sizeof当操作数是可变长度数组时是否使用计算其操作数,在未初始化sizeof(*bar)时产生未定义的行为bar.

是否使用未定义的行为,sizeof(*bar)因为我正在取消引用未初始化的指针?sizeof当类型是可变长度数组时,是实际评估的操作数,还是仅确定其类型(sizeof通常如何工作)?


编辑:每个人似乎都引用了C11选秀中的这段话.有谁知道这是否是官方标准中的措辞?

c sizeof variable-length-array

17
推荐指数
2
解决办法
1128
查看次数

为什么`int(*array)[10] = malloc(...);`有效的C代码?

我最近遇到了以下情况:

int ( *array )[10] = malloc(...);
Run Code Online (Sandbox Code Playgroud)

基于我对C语法和语法的理解,这看起来像废话.看起来像正在创建(并初始化)一个数组,其中取消引用指针的值作为其标识符.

我理解指向数组的指针,并且通常至少使用malloc()在堆上分配它们.例如,这是有道理的:

int *array = malloc(sizeof (int*) * 10);
Run Code Online (Sandbox Code Playgroud)

...但是,第一个例子看起来像不应该编译的乱码.显然,我错过了一些东西.

当我学习C时,我觉得我看到了回来的东西,但谷歌搜索并没有帮助我理解.使用术语"指针","解除引用"和"初始化"进行搜索显然会给结果带来污染,这些结果会跟踪人们如何跟踪解除引用等等.我希望人类可以帮助我.

c arrays malloc syntax pointers

6
推荐指数
3
解决办法
813
查看次数

为“矩形二维数组”动态分配连续内存,而不使用 VLA

这是有很多答案但没有一个能解决具体问题的问题之一。

\n

我尝试查看所有这些帖子 \xe2\x80\x94\n 1 2 3 4 5 6 7 8 9 \ xe2\x80\x94 ,每次解决方案都是使用 VLA、使用具有固定尺寸的普通数组,或使用指针到指针。

\n

我想要的是分配:

\n
    \n
  • 动态(使用运行时设置的变量)
  • \n
  • 矩形(“二维数组”)(我不需要锯齿状数组。而且我想无论如何都不可能做到这一点。)
  • \n
  • 连续内存(在#8和其他一些帖子中,人们说指向指针的指针不好,因为堆的东西和碎片)
  • \n
  • 没有 VLA(我听说它们是魔鬼,要始终避免它们,并且不要与建议在任何情况下使用它们的人交谈)。
  • \n
\n

所以,如果我跳过了一篇文章,或者没有读得足够透彻,满足了这些要求,请指出它。
\n否则,我会要求您对此进行教育,并告诉我这是否可能,如果可能,该怎么做。

\n

c dynamic-memory-allocation

4
推荐指数
1
解决办法
662
查看次数

Malloc是C中的2D数组

每次我为2D数组分配内存时,我首先创建一个数组,int**然后使用for我为每个元素分配内存.

例如:

int ** arr = malloc(N*sizeof(int *));
for(i=0; i< N; i++) arr[i] = malloc(M*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

不可能像以下那样分配内存:

int ** arr = malloc(N*sizeof(int[M]));
Run Code Online (Sandbox Code Playgroud)

要么

int ** arr = malloc(sizeof(int[N][M]));
Run Code Online (Sandbox Code Playgroud)

为了避免for

c arrays malloc

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