首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VS2005 C++报warning C4700: 使用了未初始化的局部变量,该如何解决

2012-02-21 
VS2005 C++报warning C4700: 使用了未初始化的局部变量我做了一个栈的操作:pSTACK是一个栈指针类型STACK是

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

热点排行