Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 初始化二维动态结构的成员_C_Arrays_Struct_Malloc - Fatal编程技术网

C 初始化二维动态结构的成员

C 初始化二维动态结构的成员,c,arrays,struct,malloc,C,Arrays,Struct,Malloc,我正在用C初始化动态二维结构,如下所示: typedef struct { int v; unsigned int t; } cb; cb **b; b = malloc( sizeof(*b) * s + (s * (e * sizeof(**b) ))); s和e是数组的维度(行和列大小) 如何在v设置为0的情况下初始化b 切勿将指针指向指针查找表用于动态分配2D数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢 相反,使用数组

我正在用C初始化动态二维结构,如下所示:

typedef struct
    {
        int v;
        unsigned int t;
    } cb;
    cb **b;
b = malloc( sizeof(*b) * s + (s * (e * sizeof(**b) )));
s和e是数组的维度(行和列大小)


如何在v设置为0的情况下初始化b

切勿将指针指向指针查找表用于动态分配2D数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢

相反,使用数组指针并在相邻内存中分配一个真正的2D数组:

cb (*arr)[y] = malloc( sizeof(cb[x][y]) );

arr[i][j] = something;

free(arr);

要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。

切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢

相反,使用数组指针并在相邻内存中分配一个真正的2D数组:

cb (*arr)[y] = malloc( sizeof(cb[x][y]) );

arr[i][j] = something;

free(arr);

要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。

切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢

相反,使用数组指针并在相邻内存中分配一个真正的2D数组:

cb (*arr)[y] = malloc( sizeof(cb[x][y]) );

arr[i][j] = something;

free(arr);

要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。

切勿使用指针到指针查找表来动态分配二维数组。这种做法很普遍,但不好且不正确,导致分割和程序缓慢

相反,使用数组指针并在相邻内存中分配一个真正的2D数组:

cb (*arr)[y] = malloc( sizeof(cb[x][y]) );

arr[i][j] = something;

free(arr);


要将所有内容初始化为零,请使用calloc而不是malloc。要将所有内容初始化为给定值,必须使用循环并逐个赋值。

使用
calloc
而不是
malloc

使用
calloc
而不是使用
malloc

使用
calloc
而不是使用
malloc

使用
calloc
而不是使用
malloc
a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写
cb arr[s][e]来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行
a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写
cb arr[s][e]来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行
a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写
cb arr[s][e]来创建它。(它也应该相当小,适合堆栈。)首先,你必须决定,C或C++。答案会有所不同。然后,这不是2D,而是它的模拟。不要这样做,C和C++都不行。在C语言中,您只需执行
a(*b)[dim2]=malloc(sizeof(a[dim1][dim2])一次完成。@sergej e和j是尺寸。垂直和水平。我将编辑我的问题。您可以通过将malloc替换为calloc将v初始化为零。数组将在函数中本地使用吗?如果是这样,您只需编写
cb arr[s][e]来创建它。(为了放在堆栈上,它也应该相当小。)您能进一步澄清一下吗?@Maxsteel
arr
是指向大小
y
的“cb数组”的指针。将其设置为指向大小为
x
times
y
的二维“cb数组”的第一个元素。由于指针算术规则与任何其他指针一样适用于数组指针,
arr[i]
将为您提供数组编号
i
,就像
int*ptr;ptr[i]
将为您提供
int
number
i
。由于
arr[i]
是一个数组,
arr[i][j]
是该数组中的一个项目。请您进一步澄清一下,好吗?@Maxsteel
arr
是指向
y
大小的“cb数组”的指针。将其设置为指向大小为
x
times
y
的二维“cb数组”的第一个元素。由于指针算术规则与任何其他指针一样适用于数组指针,
arr[i]
将为您提供数组编号
i
,就像
int*ptr;ptr[i]
将为您提供
int
number
i
。由于
arr[i]
是一个数组,
arr[i][j]
是该数组中的一个项目。请您进一步澄清一下,好吗?@Maxsteel
arr
是指向
y
大小的“cb数组”的指针。将其设置为指向大小为
x
times
y
的二维“cb数组”的第一个元素。由于指针算术规则仅适用于数组指针