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;
	}
}