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++ では値によって渡されます。したがって、 in への代入はsometimeinGetTime()には影響しませ_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 に答える