加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

warning: function returns address of local variable

(2010-04-14 10:50:48)
标签:

杂谈

如下的简单程序,编译时候会报错:warning: function returns address of local variable
#include 
#include

char *
get_str()
{
char str[512] = {'\0'};
strncpy(str, "This is a test.", strlen("This is a test"));
return str;
}

int
main(int argc, char *argv[])
{
char *str = get_str();
printf("String is: %s\n", str);
return 0;
}




原因: 函数中的局部变量存放在stack中,函数执行完成之后会自动释放,因此不应将局 部变量的指针作为返回值。

可以使用下面的方法来解决这种问题。

char *
get_str()
{
char *str = (char *) malloc(512);
memset(str, 0, 512);
strncpy(str, "This is a test.", strlen("This is a test."));
return str;
}
这种情况下,分配的变量会被存放在文字常量区,不是临 时变量,解决了前面的问题。
但注意,malloc手动分配的内存需要自己手动释放,记得再程序中调用free()。

也可以直接 return "This is a test."

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有