【发布时间】:2023-03-10 13:58:01
【问题描述】:
据我所知,这不是无限递归造成的。
程序在较小的数组中正常运行(它是一个音频编辑器)。现在我增加了功能以允许更大的数组(最多 5 分钟的音频,26460000 条 16 位数据 ~50mb)。
由于增加了数组的大小,我在一个特定函数上收到堆栈溢出错误,它应该通过将数组向后写入新数组来反转输入文件的播放,然后覆盖原始数组。我猜每个数组可能高达 50MB,这可能是问题所在:
//initialise temporary new array to place samples in
short signed int reverse_data[max_number_samples];
for (i=0; i<track_samples; i++)
{ //puts data from sound_data into reverse_data backwards.
reverse_data[(max_number_samples-1)-i]=sound_data[i];
}
for (i=0; i<track_samples; i++)
{ //now overwrites sound_data with the data in reverse_data
sound_data[i]=reverse_data[i];
}
我对 C++ 和一般编程还很陌生,我不确定我在调试过程中遇到的错误到底能告诉我什么。
任何帮助将不胜感激,我确信有一个足够简单的解决方案(我已经阅读了涉及“堆”的内容,但我不确定“堆”到底是什么)。
【问题讨论】:
-
你确定
reverse_data[(max_number_samples-1)-i]是正确的吗?您仅将数据写入reverse_data数组的末尾部分,而不是从头开始读取它们。 -
啊,我没看到这条评论。你是对的,但后来我使用了另一个循环来搜索音频的开头,并且只将数据从音频的开头写入到结尾。非常感谢您的帮助!