未初始化指针作为实参的两种错误总结
知识标签:指针, 错误, 传参, 测试
这个程序本是我做搜索引擎项目时出现的类似错误
现在我写了一个测试小程序,以作测试
code
#include<iostream>
//发生段错误,p2指向空,p2[0]访问了不存在的内存
//这种错误编译能通过,运行时出现。很容易找到
void func2(char* p2)
{
char ch = 'a';
p2[0] = ch;
}
//p3是func3中的局部变量,p是main中的局部变量
//改变指针p3的指向并没有改变p的指向
//这中错误不经意间就犯了,编译能通过,运行时能通过,只能靠自己的火眼金睛才能发现
void func3(char* p3)
{
char ch = 'a';
p3 = &ch;
}
int main(void)
{
//p没有初始化,但由于编译器的原因,p一般情况下为NULL
char* p;
if(NULL == p)
{
std::cout << "NULL == p" << std::endl;
}
//对于指针p,在函数中的操作一般就2种,这两种情况都会导致错误,见func2和func3
func3(p);
// func2(p);
}
总结
NULL指针一定不要作为实参,指针没初始化时不要作为实参