39.成员指针指向栈区和堆区内存
**非法使用内存导致的错误 **
#include
#include
#include
struct test{
char *str;
int a;
int b;
int c;
};
int main(){
struct test obj;
strcpy(obj.str, "mike");//报错
printf("str = %s\n", obj.str);
}
成员指针指向data区或者栈区
#include
#include
struct Student{
int age;
char *name;
int score;
};
int main01(){
struct Student s;
s.age = 18;
s.name = "mike";//指针变量保存了字符常量的首地址
s.score = 59;
}
**成员变量指向栈区空间 **
#include
#include
int main02(){
struct Student s;
s.age = 18;
char buf[100];
s.name = buf;
strcpy(s.name, "mike");
s.score = 59;
//我们定义了一个字符型的数组,将name指向的栈区的buf
}
成员指针指向堆区空间
#include
#include
int main03(){
struct Student s;
s.age = 18;
s.name = (char *)malloc(strlen("mike") + 1);
strcpy(s.name, "mikejinagabcsb");
s.score = 59;
printf("%d, %s, %d\n", s.age, s.name, s.score);
if(s.name != NULL)
{
free(s.name);
s.name = NULL;
}
}