自从我编写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()
,应用程序崩溃,段错误
感谢您的快速答复!我感到非常愚蠢的问这样一个愚蠢的问题,但多亏了你,我不会再犯这个错误:) –
@maxPlauth不要担心,有这样的方式更糟糕的问题。就像,大小的顺序更糟(当OP甚至没有关于他在做什么的最小想法时)。你的不是其中之一。 – 2013-07-24 14:35:32