访问冲突读取位置尝试获取系统时间时

Posted

技术标签:

【中文标题】访问冲突读取位置尝试获取系统时间时【英文标题】:Access violation reading location When trying to get system time 【发布时间】:2013-06-06 00:21:13 【问题描述】:

这是我尝试获取时间的代码的 sn-p:

void GetDate(int &month,int &day,int &year)
  time_t SystemTime;

  struct tm *OSTime;
  OSTime=localtime(&SystemTime);

  month=OSTime->tm_mon;
  day=OSTime->tm_mday;
  year=OSTime->tm_year;

  month+=1;
  year+=1900;

当它到达时:

月=OSTime->tm_mon;

它抛出:

GonzalesP2.exe 中 0x01101123 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000010。

这里是调用GetDate的方法:

void Calendar::SetMonthYear(int mon,string sYr)
  string temp;

  GetDate(tMonth,tDay,tYear);
  if(mon==0 && sYr=="0000")
    mon=tMonth;
    sYr=tYear;
  

  month=mon;
  //get the year
  temp=sYear.at(2);
  temp+=sYear.at(3);
  year=atoi(temp.c_str());
  //get the century
  temp=sYear.at(0);
  temp+=sYear.at(1);
  cent=atoi(temp.c_str());
  FillMonthGrid();

请帮忙。

【问题讨论】:

【参考方案1】:

你又忘记了一步:

  time (&SystemTime); //^^Should first do this
  struct tm *OSTime;
  OSTime=localtime(&SystemTime);

您可以在此处找到示例用法:localtime,在调用localtime 之前调用time

【讨论】:

我没有一个叫做 time 的 var,和 OSTime=localtime(&SystemTime); 不一样 time 是另一个类似localtime 的函数,而不是变量。您的SystemTime 未初始化,它是time_t 的简单对象。您需要首先通过调用time 函数将当前时间放入SystemTime @jgonzales394 没关系。唯一重要的是它有效。 @jgonzales394 欢迎您。当系统允许时,您可以考虑接受答案。

以上是关于访问冲突读取位置尝试获取系统时间时的主要内容,如果未能解决你的问题,请参考以下文章

访问dll方法时访问冲突读取位置

使用 ReadFile 时访问冲突读取位置

访问冲突读取位置 0xcccccccc

使用 memcpy 时出错:“访问冲突读取位置 0x0000000000000000”

异常错误:访问冲突读取位置 0xDDDDDDDD

使用 glutMouseFunc 获取访问冲突读取位置 0x000000b0