Tom*_*lav 7 c struct pointers initialization memset
我没有找到这个问题的确切答案,所以这是一个愚蠢的问题,或者只是显而易见的问题.我想知道它是否会产生未定义的行为.
我定义了一些结构类型:
typedef struct {
char string1[17];
char string2[33];
int someInt;
float someFloat;
} my_struct_t;
Run Code Online (Sandbox Code Playgroud)
我需要该结构的多个实例(就像你在struct数组中一样),但是在编译时对象的数量是未知的.
像这样初始化它是否正确?
my_struct_t *myStruct;
size_t noOfElements;
size_t completeSize;
int index;
/* ...code which sets the number of elements at runtime... */
completeSize = sizeof(my_struct_t) * noOfElements;
myStruct = malloc(completeSize);
memset(myStruct, 0, completeSize);
/* ...and then access it as if it were an array...*/
myStruct[index].someInt = 10; // index < noOfElements
Run Code Online (Sandbox Code Playgroud)
这样做安全吗?这memset()部分是我担心的.
cda*_*rke 10
到目前为止,使用malloc后跟memset是可以的,但您可能希望考虑(未充分使用)calloc.例如:
pMyStruct = calloc(noOfElements, sizeof(my_struct_t));
Run Code Online (Sandbox Code Playgroud)
这将为所需数量的元素分配内存,并将它们初始化为二进制零.
这样做安全吗?memset()部分是我担心的.
是的,它是安全的,因为这不会导致任何未定义的行为(缓冲区溢出,未初始化的值等).
但是,它不一定会将您的值设置为零. memset将位设置为0,但这不一定与设置例如a float到值的值相同0(尽管在实践中,它在大多数普通平台上都可以).
| 归档时间: |
|
| 查看次数: |
661 次 |
| 最近记录: |