局部变量的地址空间分配和作用域导入存放在deque中的字符串出现乱码
2016-07-10 23:11
246 查看
// normal_bug.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include"iostream" #include <deque> #pragma warning(disable:4996) using namespace std; deque<char*> getDeque(); int main() { for (auto deque : getDeque()) { cout << deque << endl; } return 0; } deque<char*> getDeque() { char a[5][20] = { "11111", "22222", "33333", "44444", "55555" }; deque<char*> myDeque; for (size_t i = 0; i < 5; i++) { char ptemp[20]; strcpy(ptemp, a[i]); myDeque.push_back(ptemp); } return myDeque; }
在执行了上面的代码之后出现了这样的 错误,打印出来的东西全部都是乱码,这个很奇怪啊,上面代码怎么看也找不到哪里会有问题啊,既然出现问题了,在表面上也找不到错误在哪,因此,只有通过debug来查找错误了。
从上面的debug中好像看到了一些问题了,在deque里面所有的字符串都是 “55555”,而且他们的地址都是一样的,而且还有一个问题,在最后输出的时候都是乱码的,并不是“55555”。然后我能想到的就是可能局部的变量 char ptemp[20]; 这句代码有问题,我的猜想是:ptemp 是个for循环里的局部变量,每一次循环ptemp都会经历地址空间的分配和销毁,但是每一次进行地址空间的再分配时都是原来的那个地址,然后我们每一次将ptemp push_back()到deque中时都是同一个地址,保存的都是同一个字符串,当跳出for循环时ptemp
的作用域已经失效,地址空间被收回,故最后我们看到输出都是乱码的,那么我们就再次修改一下代码。给局部变量自己进行地址空间的分配
char ptemp[20];
以下是修改后的代码
// normal_bug.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include"iostream" #include <deque> #pragma warning(disable:4996) using namespace std; deque<char*> getDeque(); int main() { for (auto deque : getDeque()) { cout << deque << endl; } return 0; } deque<char*> getDeque() { char a[5][20] = { "11111", "22222", "33333", "44444", "55555" }; deque<char*> myDeque; for (size_t i = 0; i < 5; i++) { char* ptemp = (char*)malloc(sizeof(char) * 20); strcpy(ptemp, a[i]); myDeque.push_back(ptemp); } return myDeque; }
然后再重新运行以下,然后就可以了,最后证实我的猜想是对的
相关文章推荐
- c语言全局变量和局部变量问题及解决汇总
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- sqlserver 局部变量的使用
- 全局变量与局部变量在内存中的区别详细解析
- 关于全局变量和局部变量的那些事
- javascript中局部变量和全局变量的区别详解
- javascript 用局部变量来代替全局变量第1/2页
- 浅谈JavaScript的全局变量与局部变量
- c++静态局部变量和静态函数示例
- JS全局变量和局部变量最新解析
- awk实现Left、join查询、去除重复值以及局部变量讲解例子
- phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
- Android中的全局变量与局部变量使用小结
- Android中的全局变量与局部变量使用小结
- 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题
- python函数局部变量用法实例分析
- JS全局变量和局部变量最新解析
- Python函数中的局部变量和全局变量
- 什么是局部变量
- java 中局部变量,成员变量,静态变量