在结构体的使用中,常常出现内存使用不当导致的各种内存问题,
2、
struct A
{
int a;
char *name;
};
接下来要列出来的一些常见的内存错误都基于上面这样一个简单的结构体类型
1、
int main()
{
struct A a;// = {9, "hello"};
//printf ("id = %d, name = %s\n", a.a, a.name);
a.a = 20;
strcpy(a.name, "abc");
printf ("id = %d, name = %s\n", a.a, a.name);
return 0;
}
这样的一个程序就是没有为结构体指针分配空间,会导致问题。需要加上
a.name = (char *)malloc(sizeof(char) * 20);
这样一行空间分配的代码。
2、
char **getNames1()
{
char *name[3] = {"zhangsan", "lisi", "xiaoming"};
return name;
}
这样的错误情形,不能返回栈的地址,因为name是在栈上开辟的数组。同样的错误还有以下这种形式:
char **getNames2()
{
char **name = (char **)malloc(sizeof(char*) * 3);
int i;
for (i = 0; i < 3; i++)
{
name[i] = (char *)malloc(sizeof(char) * 20);
}
strcpy(name[0], "zhangsan");
strcpy(name[1], "lisi");
strcpy(name[2], "xiaoming");
return name;
}