当我在函数中打印第一个值后尝试打印f时出现C分段错误

用户名

我得到段错误,当我尝试使用printf*buffer[i]readWav()功能。buffer能够正确地传递给main()和我能够在检查值maindatas[i]我只是复制了printfin main(),必须替换in datas[i]*buffer[i]然后编译良好。它打印第一个值readWav(),然后发生SegFault

如何做到这一点的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);
}
用户4413591

取消引用指针之前,您正在访问数组索引

你的意思做(*buffer)[i],但确实*(buffer[i])不是(我如何添加为清晰起见,括号通知)

下次,请记住*优先级低于[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试打印数组的第一个值时出现分段错误

尝试引用char *中的第一个元素时,C中出现分段错误

当我尝试在这个函数中打印第一个索引时,我被卡住了。我不明白为什么空格打印在一起

当我在列表中添加数字并打印它们时,它只会添加第一个数字

当我尝试使用我的 Json 时,它只显示第一个值(标题)目标 c

当我尝试在Python3中的函数中打印全局变量时出现错误

将数组传递给函数时出现问题,因为仅打印第一个单词 c++

在 C 中打印 char* 时,仅打印第一个字符

当我分配一个值时,链表出现分段错误

传递给函数后,GDB打印数组仅打印第一个值,但数组仍完整无缺

当我在词典中打印2个键和2个值时,第一个键和值将自己替换为第二个键和值

尝试打印时出现垃圾值和分段错误

嘿!我正在尝试使用 C 中的链表尝试所有可能性,但是当我尝试删除第一个项目 (pop) 时,我不断收到错误消息

尝试打印结构时出现分段错误

尝试反向打印数组时出现c ++分段错误

当我只想打印一个值时,为什么ghc给我一个解析错误?

我正在尝试打印“字段”的整个值。但是它跳过了第一个输入,为什么呢?

输入第一个元素后出现分段错误

从另一个函数中的指针检索值时出现分段错误

当我在另一个函数中使用setTimeout并尝试打印传递的参数的值时,到底发生了什么?

删除第一个数字时出现分段错误

打印数组只会导致第一个值被打印到 excel 中?

打印链接列表时,最后一个元素值出现在第一个和最后一个位置

当我在另一个函数中调用一个函数时,返回值不会被打印出来,所以我需要使用打印函数

当我打印动态分配的数组时,它只打印最后一个值

Django中的第一个项目在尝试启动时给我一个错误

打印数组中的第一个索引将使用C打印每个索引

为什么当我尝试在 ruby 中打印 [string * Intger] 时出现错误?

打印列表中的第一个,第二个出现的字符