memset带有指针的结构体
时间: 2023-10-16 13:30:50 浏览: 103
结构体与指针
4星 · 用户满意度95%
当使用memset函数对结构体进行清零时,需要注意结构体中有指针的情况。因为memset函数只是简单地将内存中的数据全部清零,而不会对指针指向的内存空间进行清零。这可能导致程序出现未定义行为。
为了避免这种情况,可以考虑使用其他函数来清空结构体,例如将结构体变量赋值为0或使用结构体初始化器来初始化结构体。
示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int *p;
int size;
} MyStruct;
int main() {
MyStruct myStruct;
myStruct.size = 10;
myStruct.p = (int*)malloc(sizeof(int) * myStruct.size);
// 使用memset清空结构体
memset(&myStruct, 0, sizeof(myStruct));
// myStruct.p指针指向的内存空间未被清空
// 使用赋值操作清空结构体
myStruct.size = 0;
myStruct.p = NULL;
// 使用结构体初始化器初始化结构体
MyStruct myStruct2 = {NULL, 0};
}
```
阅读全文