4

这可能很简单,但我很困惑!从指向指针的指针中提取信息时出现分段错误。请参阅 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;

}
4

3 回答 3

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;
于 2012-05-13T00:57:38.673 回答
2

除非参数被显式标记为使用引用,否则它在 C++ 中按值传递。因此,分配给sometimein对inGetTime()没有影响。_timemain()

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

于 2012-05-13T00:56:49.517 回答
1

main

它应该是

Time *_time;

GetTime(&_time)

然后cout应该用_time代替*_time

于 2012-05-13T01:01:18.903 回答