Cry*_*tal 1 c++ segmentation-fault
我在调试代码时遇到问题.我有一个结构和函数来计算以HH:MM:SS格式输入的时差.我的代码是:
const int hourConv = 3600; // used to get total hours from total seconds
const int minConv = 60;
struct MyTime {
int hours, minutes, seconds;
};
MyTime *determineElapsedTime(const MyTime *time1, const MyTime *time2)
{
long timeOneSec = time1->hours*hourConv + time1->minutes*minConv + time1->seconds;
long timeTwoSec = time2->hours*hourConv + time2->minutes*minConv + time2->seconds;
long ans = timeTwoSec - timeOneSec;
cout << ans;
MyTime *timeDiff;
timeDiff->hours = ans / hourConv;
timeDiff->minutes = ans % hourConv / minConv;
timeDiff->seconds = ans % hourConv % minConv;
return timeDiff;
}
Run Code Online (Sandbox Code Playgroud)
我认为问题与第二行到最后一行:
timeDiff->seconds = ans%hourConv%minConv;
因为当我评论该行时,我没有得到分段错误错误.但我不明白为什么那条线无效.任何帮助,将不胜感激.谢谢!
您的代码包含:
MyTime *timeDiff;
timDiff->hours = ...
Run Code Online (Sandbox Code Playgroud)
您已创建MyTime指针但未分配任何内容.此时timeDiff为null.
您正尝试使用以下代码访问未分配的内存:
MyTime *timeDiff;
timeDiff->hours = ans / hourConv;
Run Code Online (Sandbox Code Playgroud)
虽然您可以通过使用new手动分配代码来解决此问题,因为:
MyTime *timeDiff = new MyTime;
timeDiff->hours = ans / hourConv;
Run Code Online (Sandbox Code Playgroud)
我强烈建议您更改函数以按值返回MyStruct,作为堆栈分配的变量.我还建议将参数作为pass-by-const引用:
MyTime determineElapsedTime(MyTime const &time1, MyTime const &time2)
{
long timeOneSec = time1.hours*hourConv + time1.minutes*minConv + time1.seconds;
long timeTwoSec = time2.hours*hourConv + time2.minutes*minConv + time2.seconds;
long ans = timeTwoSec - timeOneSec;
cout << ans;
MyTime timeDiff;
timeDiff.hours = ans / hourConv;
timeDiff.minutes = ans % hourConv / minConv;
timeDiff.seconds = ans % hourConv % minConv;
return timeDiff;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3048 次 |
| 最近记录: |