1、结构体中的指针
struct string
{
char *ptr;
......
}
- 如果结构体中的指针指向的是动态分配的内存地址:
- 对结构体用sizeof运算可能没有意义。
- 对结构体用memset()函数可能会造成内存泄露。
- C++的字符串string中有一个指针,指向了动态分配内存的地址。
2、示例代码
struct st_message
{
int srcqq;
int dstqq;
char context[1024];
};
int main()
{
st_message message;
while (true)
{
memset(message, 0, sizeof(message));
}
}
#include <iostream>
using namespace std;
struct st_t
{
int a;
int *p;
};
int main()
{
st_t stt;
memset(&stt, 0, sizeof(st_t));
stt.a = 3;
stt.p = new int[100];
cout << "sizeof(stt)=" << sizeof(stt) << endl;
cout << "调用前:stt.a=" << stt.a << ",stt.p=" << stt.p << endl;
stt.a = 0;
memset(stt.p, 0, 100 * sizeof(int));
cout << "调用后:stt.a=" << stt.a << ",stt.p=" << stt.p << endl;
delete [] stt.p;
}
#include <iostream>
using namespace std;
struct st_girl
{
string name;
};
int main()
{
st_girl girl;
girl.name = "西施";
cout << "girl.name=" << girl.name << endl;
girl.name = "好大的西瓜";
cout << "girl.name=" << girl.name << endl;
}