第一个值之后,我越来越段故障。并且buffer
能够正确传递到main()
,我能够使用datas[i]
检查main
中的值。我只是将printf
复制到main()
中,并且必须用*buffer[i]
替换datas[i]
,然后编译好。它打印readWav()
中的第一个值,然后发生SegFault。ç分段错误,当我尝试当我尝试在<code>readWav()</code>功能上<code>*buffer[i]</code>使用<code>printf</code>给printf只是打印功能里面
如何做到这一点的readWav()
- 什么是错的*buffer[i])
- 换句话说,如果datas[i]
是指实际值main()
那会是在readWav()
在buffer
方面是什么?
更新: main()
将通过datas
其他功能仍需添加。这就是为什么我试图在readWav()
中打印它,认为它将如何传递给其他功能非常相似 - 请纠正我,如果我错了?
#include <stdio.h>
#include "sndfile.h"
int readWav(const char *const fname, long *numFrames, int *sRate, float **buffer);
int main(int argc, char *argv[])
{
int sRates, sRatem, ret;
long nSamples = 0, nSamplem;
float *datas, *datam;
printf("Read Test\n");
if (argc != 3) {
fprintf(stderr, "Expecting two wav file as argument\n");
return 1;
}
ret = readWav(argv[1], &nSamples, &sRates, &datas);
if (ret != 0) {
printf("Error\n");
return 1;
}
// Output Info
printf("Read %ld frames from %s, Sample rate: %d, Length: %fs\n",
nSamples, argv[1], sRates, (float)nSamples/sRates);
for (i=0; i < nSamples ; i++) {
printf("%d\t %f\n", i, datas[i]);
}
free(datas);
return 0;
//Cleanup etc:
}
int readWav(const char *const fname, long *numFrames, int *sRate, float **buffer)
{
// Open sound file
SF_INFO sndInfo;
if ((sRate == NULL) || (numFrames == NULL) || (buffer == NULL)) {
fprintf(stderr, "Invalid arguments passed to readWav()\n");
return 1;
}
SNDFILE *sndFile = sf_open(fname, SFM_READ, &sndInfo);
if (sndFile == NULL) {
fprintf(stderr, "Error reading source file '%s': %s\n", fname, sf_strerror(sndFile));
return 1;
}
// Allocate memory
*buffer = malloc(sndInfo.frames * sndInfo.channels * sizeof(float));
if (*buffer == NULL) {
fprintf(stderr, "Could not allocate memory for file\n");
sf_close(sndFile);
return 1;
}
*sRate = sndInfo.samplerate;
// Load data
*numFrames = sf_readf_float(sndFile, *buffer, sndInfo.frames);
// Check correct number of samples loaded
if (*numFrames != sndInfo.frames) {
fprintf(stderr, "Did not read enough frames for source\n");
sf_close(sndFile);
free(*buffer);
}
else {
printf("Successfully read file\n");
*numFrames = sndInfo.frames;
}
// Output Info
printf("Read %ld frames from %s, Sample rate: %d, Length: %fs\n",
*numFrames, fname, *sRate, (float)*numFrames/sndInfo.samplerate);
for (i=0; i < sndInfo.frames ; i++) {
printf("%d\t %f\n", i, *buffer[i]);
}
sf_close(sndFile);
return(0);
}
你必须首先解除引用:'(* buffer)[i]' – 2015-01-31 19:13:25