C++基础--指针--指针局部变量赋值的坑

指针局部变量赋值的坑

输出结果为空,并非helloworld

其主要原因为:传递指针 后,指针的赋值与传统变量不相同,在函数中,局部变量指针给原指针的赋值很可能出现问题。

#include <iostream>
#include <cstring>
#include <malloc.h>

using namespace std;
char* test2();
void  allocatespace(char* pp);
int main() {
	test2();
}

void  allocatespace(char *pp) {
	char* temp = (char*)malloc(100);
	memset(temp, 0, 100);
	strcpy(temp, "helloworld");
	pp = temp;
}

char* test2() {
	char *p = NULL;
	allocatespace(p);
}

从内存分布图可以看出,pp的值并没有传递给p,p指针依旧为NULL

解决方案:使用二级指针,修改代码如下:

1.修改allocatespace(char* pp); 为void allocatespace(char** pp);

2.修改test2(),向allocatespace传递p指针的地址

3.allocatespace种 pp = temp;变为*pp = temp;

#include <iostream>
#include <cstring>
#include <malloc.h>

using namespace std;
char* test2();
void  allocatespace(char** pp);
int main() {
	test2();
}

void  allocatespace(char **pp) {
	char* temp = (char*)malloc(100);
	memset(temp, 0, 100);
	strcpy(temp, "helloworld");
	*pp = temp;
}

char* test2() {
	char *p = NULL;
	allocatespace(&p);
}

地址描述如下:

少乱用指针

posted @ 2020-12-04 17:14  lsxkugou  阅读(739)  评论(0编辑  收藏  举报