haz*_*ard 8 c arrays heap-memory
在 CI 中可以像这样初始化堆栈上的数组:
SOME_DATA_TYPE* x = (SOME_DATA_TYPE[5]) {v1, v2, v3, v4, v5};
Run Code Online (Sandbox Code Playgroud)
是否有类似的单行方法将值分配给malloc()堆上的-ed 数组?
SOME_DATA_TYPE* y = malloc(sizeof(SOME_DATA_TYPE)*5);
// what comes here?
Run Code Online (Sandbox Code Playgroud)
或者我是否必须遍历数组并单独分配值?
关于“初始化”结果的第一个问题malloc()是分配可能会失败。这里y被初始化为一些指针值。引用的数据仍然不确定。
#define element_count 5
SOME_DATA_TYPE *y = malloc(sizeof *y * element_count);
if (y == NULL) Handle_OutOfMemory();
Run Code Online (Sandbox Code Playgroud)
使用 C11,代码可以使用复合文字来设置,而不是初始化,指向的数据y。
memcpy(y, (SOME_DATA_TYPE[element_count]) {v1, v2, v3, v4, v5}, sizeof *y * element_count);
Run Code Online (Sandbox Code Playgroud)
使用不检查分配的直接单行程序不是健壮的编程。
// one-liner, but not robust code
SOME_DATA_TYPE *y = memcpy(malloc(sizeof *y * element_count),
(SOME_DATA_TYPE[element_count]) {v1, v2, v3, v4, v5}, sizeof *y * element_count);
Run Code Online (Sandbox Code Playgroud)
注意代码使用sizeof *pointer_variable * element_count而不是sizeof (pointer_variable_dereferenced_type) * element_count因为更容易编码、更不容易出错、更容易审查和维护。任何一种方法都会奏效。
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |