自从我写完最后几行 C 以来已经有一段时间了,此时我在掌握 C 的窍门时遇到了问题。我想这可能是我犯的一个愚蠢的错误,但是在研究了一段时间后,我仍然无法弄清楚我做错了什么。所以这就是我的代码的样子:
int read_signal_from_file(const char* path, float* signal, SF_INFO * info) {
SNDFILE *sndFile;
sndFile = sf_open(path, SFM_READ, info);
signal = malloc(info->frames * sizeof(float));
long numFrames = sf_readf_float(sndFile, signal, info->frames);
...
}
和
int main(int argc, char *argv[]) {
float** signals = malloc(NUM_FILES * sizeof(float*));
float avg = 0.0;
SF_INFO tmp_info;
for(int i = 0; i < NUM_FILES; i++) {
read_signal_from_file(INPUT_FILES[i], signals[i], &tmp_info);
for(long j = 0; j < tmp_info.frames; j++) {
printf("Sample no #%ld: %f\n", j, signals[i][j]);
}
}
}
在里面read_signal_from_file()
,我可以毫无困难地访问分配的内存部分。但是,一旦我试图从主函数的范围内访问它(例如,在上面的 printf() 示例中,我就会得到损坏的结果,看起来像是未初始化的内存或溢出。如果我尝试对该数据进行操作, (例如,通过调用vDSP_meanv()
,应用程序因段错误而崩溃。