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

输出数组出现奇怪结果,求解释解决方案

2012-05-29 
输出数组出现奇怪结果,求解释代码和输出如下,求解释:C/C++ code#include iostreamusing std::coutusing

输出数组出现奇怪结果,求解释
代码和输出如下,求解释:

C/C++ code
#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;}


[解决办法]
还是先前说的传值的问题
record arr[size] = 
{
{ 0, 'A' }
, { 1, 'B' }
, { 2, 'C' }
, { 3, 'C' }
, { 3, 'E' }
, { 5, 'F' }
, { 6, 'G' }
, { 7, 'H' }
, { 8, 'I' }
, { 9, 'J' }
};
这个地方是局部变量 当你除了这个函数以后就被析构了 所以输出是那些乱东西
建议 1.可以用new 来动态分配
2.就是static变量
C/C++ code
#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)

热点排行