打印指针指针

时间:2012-05-13 00:48:52

标签: c++

这可能很简单,但我很困惑! 从指针指针中提取信息时,我遇到了分段错误。请参阅main()中的cout部分。任何帮助将不胜感激 感谢..

#include <stdlib.h>
#include <iostream>

typedef struct{
  int hour;
  int minute;
} Time;

Time* GetNextTime(void)
{
 Time *p_time = new Time;
 return p_time;  
}

void GetTime( Time **sometime )
{
 int length = 10;
 sometime = new Time*[length];
 for(int i=0; i<length; i++)
 {
    sometime[i] = GetNextTime();
    sometime[i]->hour = rand()%24 ;
    sometime[i]->minute = rand()%60;
    std::cout << "Entered times " << sometime[i]->hour << " hour " << sometime[i]->minute << " minutes " << std::endl;
  }
}


int main()
{
  Time** _time;
  GetTime( _time );

 //here is the question
 // I cant print them from original _time
  for( int i=0; i<10; i++)
  std::cout <<  " Print times " << (*_time)[i].hour << " hour " << (*_time)[i].minute << " minutes " << std::endl;

}

3 个答案:

答案 0 :(得分:4)

您按值传递sometime,而不是按引用传递,因此它仍然未初始化。将GetTime更改为以下内容:

void GetTime( Time ** &sometime ) //& means pass by reference

因为您正在创建一个指针数组,所以您也可以使用数组表示法在打印期间访问它们。

std::cout <<  " Print times " << _time[i]->hour << " hour "
          << _time[i]->minute << " minutes " << std::endl;

答案 1 :(得分:2)

除非将参数明确标记为使用引用,否则它将在C ++中通过值传递。因此,分配到sometime中的GetTime()_time中的main()没有影响。

我的强烈建议对我们说明内存分配但是使用容器,例如而是std::vector<T>。但是,您仍然需要通过引用传递容器。

答案 2 :(得分:1)

main

应该是

Time *_time;

GetTime(&_time)

然后cout应该使用_time代替*_time