我如何将内存正确分配给C中的数组



对不起,如果这是一个新手问题,这是我第一次在此网站上!

目前,我有一个数组:

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;
}

相关内容

  • 没有找到相关文章

最新更新