输出数组出现奇怪结果,求解释
代码和输出如下,求解释:
#include <iostream>using std::cout;using std::endl;using std::ostream;using std::pair;using std::make_pair;// 记录struct record{ int key; char data; void output(ostream &out) const { out << key << ", " << data; }};// 将记录输出到 coutvoid output_records(const record *arr, size_t size){ for (size_t i = 0; i < size; ++i) { arr[i].output(cout); cout << endl; }}pair<record *, size_t> new_array(){ const size_t size = 10; record arr[size] = { { 0, 'A' } , { 1, 'B' } , { 2, 'C' } , { 3, 'C' } , { 3, 'E' } , { 5, 'F' } , { 6, 'G' } , { 7, 'H' } , { 8, 'I' } , { 9, 'J' } }; return make_pair(arr, size);}int main(){ auto arr_info = new_array(); output_records(arr_info.first, arr_info.second); /* 输出:-858993460,-858993460,-858993460,-858993460,-858993460,-858993460,-858993460,-858993460,-858993460,-858993460, */ system("pause"); return 0;}
#include <iostream>using std::cout;using std::endl;using std::ostream;using std::pair;using std::make_pair;// 记录struct record{ int key; char data; void output(ostream &out) const { out << key << ", " << data; }};// 将记录输出到 coutvoid output_records(const record *arr, size_t size){ for (size_t i = 0; i < size; ++i) { arr[i].output(cout); cout << endl; }}pair<record *, size_t> new_array(){ const size_t size = 10; static record arr[size] = { { 0, 'A' } , { 1, 'B' } , { 2, 'C' } , { 3, 'C' } , { 3, 'E' } , { 5, 'F' } , { 6, 'G' } , { 7, 'H' } , { 8, 'I' } , { 9, 'J' } }; return make_pair(arr,size);}int main(){ auto arr_info = new_array(); output_records(arr_info.first, arr_info.second); /* 输出: -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, -858993460, */ system("pause"); return 0;}
[解决办法]
pair<record *, size_t> new_array()这个函数有问题,原因:试图将栈上局部数组,作为返回值。
将record arr[size]改为static record arr[size]即可,或者
将arr设为全局数组,或者
用new或则malloc在堆上为其分配内存(这种方式要记得delete或者free)