这可能很简单,但我很困惑! 从指针指针中提取信息时,我遇到了分段错误。请参阅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;
}
答案 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