对不起,如果这是一个新手问题,这是我第一次在此网站上!
目前,我有一个数组:
float delayTable[];
这是针对音频编程类的,因此该数组将用于存储单个音频样本。在一秒钟内,它需要存储44,100种不同的浮子。如何使用malloc给它足够的内存以持有10秒以上的数据?欢呼!
我不确定您的意思是10秒以上,这可能是任何高于10的数字...如果要分配信号10秒的数组,则必须按时间将样本乘以乘以,然后将其乘以样品的大小,因此:
float *delayTable = malloc(44100 * 10 * sizeof(float));
或者:
float *delayTable = malloc(44100 * 10 * sizeof(*delayTable));
要求" 10 "秒记录时间的问题 - 表明长度未固定。此答案是" 0 "秒记录时间,随着记录的进行时,扩展了数组。
#include <stdio.h>
#include <stdlib.h>
float getsample(void) { // placeholder function
return (float)rand()-1;
}
int main(void) {
float *delayTable = NULL; // start with no array memory
float sample;
int samplespersec = 44100;
int secs = 0;
int numsamples = 0;
int maxsamples = 0;
while ((sample = getsample()) >= 0) { // imaginary, func returns < 0 when done
if (numsamples == maxsamples) { // array is full
secs++; // memory for one more second
maxsamples = secs * samplespersec; // improve by checking int constraint
delayTable = realloc(delayTable, maxsamples * sizeof(*delayTable)); // expand
if (delayTable == NULL)
exit(1); // improve this error condition
}
delayTable[numsamples++] = sample;
}
printf("Recorded %d samplesn", numsamples);
//free(delayTable);
return 0;
}