VS2005 C++报warning C4700: 使用了未初始化的局部变量
我做了一个栈的操作:
pSTACK是一个栈指针类型
STACK是一个栈类型
下面是栈的一个初始化函数
/* ************************************************************* */
/* 初始化栈,使栈头为空,栈长为0 */
/* 初始化成功返回True,否则返回 False */
/* ************************************************************* */
BOOL InitStack(pSTACK s)
{
s = (pSTACK)malloc(sizeof(STACK));
if(!s)
{
printf( "Error while allocating space for the stack.\n ");
return FALSE;
}
s-> length = 0;
s-> top = NULL;
return TRUE;
}
在主函数中调用时:
pSTACK s;
if(InitStack(s) == FALSE)
{
printf( "Error while initializing the Stack!\n ");
return 0;
}
报错,编译通过,执行时再次出现局部变量没有初始化.
当把s初始化放在主函数中或者把初始化函数改为:
BOOL InitStack(pSTACK* s)(相应的函数作出一定改动),在主函数中调用:
pSTACK s;
if(InitStack(&s) == FALSE)...则可以编译通过.
百思不得其解,有哪位高手可以解决此问题?
[解决办法]
有什么不行其解的。
这样写的时候:
BOOL InitStack(pSTACK s);
参数是传值。
就算这样:
pSTACK s;
InitStack(s);
是把s的值传给InitStack函数里面的形参s,对形参的改变不能影响到实参。也就是说外面的s的值任然没有改变,只个未定义的。所以要用BOOL InitStack(pSTACK& s);