首页 > 解决方案 > CS50 pset3 音乐分段错误

问题描述

今天我完成了音乐项目,或者至少我认为我已经完成了。在 helper.c 上,当我运行 make 时,它​​会生成音符和合成器文件,并且没有错误。但是当我想运行 ./notes 时,它会给我分段错误错误。即使我用 check50 运行程序,它也给了我这个错误:

由于分段错误而无法执行程序

我个人认为这可能是因为将字符串转换为 int 或我从字符串中获取音符的方式。首先,我介绍了一个用于记笔记的字符串和一个用于记笔记的 ovtav 的 int。

弦音符类似于 D4 或 C#4

因此,我将复制这部分内容,以与您核对是否正确。

string noteletter="";
int noteoctav;
if (strlen(note) == 3)
{
    noteletter[0] = note[0];
    noteletter[1] = note[1];
    noteoctav = note[2] - '0';
}
if (strlen(note)== 2)
{
    noteletter[0] = note[0];
    noteoctav = note[1] - '0';
}

更新

在这里,我添加了完整的代码,这样你就可以看到我想要做什么。

标签: ccs50

解决方案


我可以看到两个问题(假设string是 typedef 的char*

如果noteletter长度为 0(值= ""),那么您认为noteletter[1]在做什么?

即使noteletter设置为更大的值(例如noteletter = "ABC";) - 写入文字字符串也是未定义的行为。

试着char noteletter[3] = { 0 };得到一些(一目了然)看起来足够大的东西。

另一个可能的问题:if noteis NULLor invalid thenstrlen(note)不安全。


推荐阅读