c++ - 将数据写入新文件时出现异常

标签 c++ c fwrite yuv

我的任务是读取一个 yuv 文件和它的每个组件(Y、Cb、Cr),我附加一些数据并将其存储到另一个文件中。我试过下面的代码:

#include <stdio.h>
#include <stdlib.h>

void main()
{
    FILE *fp=fopen("traffic_1920x1080.yuv","rb");
    FILE *myYUV=fopen("traffic_1920x1088.yuv","ab");
    int count=0;
    unsigned char *y=(unsigned char*)malloc(sizeof(unsigned char)*1920*1080);
    unsigned char *u=(unsigned char*)malloc(sizeof(unsigned char)*(1920/2)*(1080/2));
    unsigned char *v=(unsigned char*)malloc(sizeof(unsigned char)*(1920/2)*(1080/2));

    unsigned char ypad[1920*8];
    unsigned char upad[(1920/2)*4];
    unsigned char vpad[(1920/2)*4];

    for(int i=0;i<(1920/2)*4;i++)
    {
        ypad[i]=255;
        upad[i]=128;
        vpad[i]=128;
    }
    for(int i=(1920/2)*4;i<1920*8;i++)
        ypad[i]=255;
    while (!feof(fp))
    {
        fread(y,sizeof(unsigned char),1920*1080,fp);
        fread(u,sizeof(unsigned char),1920/2*1080/2,fp);
        fread(v,sizeof(unsigned char),1920/2*1080/2,fp);

        fwrite(y, sizeof(unsigned char),1920*1080,myYUV);
        fwrite(ypad,sizeof(unsigned char),1920*8,myYUV);

        fwrite(u,sizeof(unsigned char),1920/2*1080/2,myYUV);
        fwrite(upad,sizeof(unsigned char),1920/2*4,myYUV);

        fwrite(v,sizeof(unsigned char),1920/2*1080/2,myYUV);
        fwrite(vpad,sizeof(unsigned char),1920/2*4,myYUV);

        printf("Frame %d created\r",count);
        y+=1920*1080;
        u+=1920/2*1080/2;
        v+=1920/2*1080/2;
        count ++;
    }
    free(y);
    free(u);
    free(v);

    fclose(fp);
    fclose(myYUV);
}

但是上面的代码在第一个循环中工作正常,但是在第二个循环中我得到了一个异常

Access violation writing location 0x0092f000.

在行 fwrite(y, sizeof(unsigned char),1920*1080,myYUV);

这是指针增量的问题吗?或者是别的东西?请回复。提前致谢。

最佳答案

这些增量:

y+=1920*1080;
u+=1920/2*1080/2;
v+=1920/2*1080/2;

会将指针递增到已分配内存的末尾。例如,y 指向分配内存的 1920*1080 字节的开始。将它增加那么多会使它指向该内存的末尾。这导致读取/写入未分配的内存。这就是您遇到访问冲突的原因。

我实际上根本看不出有什么理由让这些指针递增。

除此之外,您的代码应该检查错误条件(fopen() 是否成功等)

关于c++ - 将数据写入新文件时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17648724/

相关文章:

c++ - const ref 绑定(bind)到右值的内部资源

c++ - 算法运行时间

c - 修改 Ruby 源 - 无法修改方法

c - 基本 C 程序已停止工作 : just in time debugger

c++ - fwrite 阻塞在 "<?xml version"

c - 从文件中动态读取结构时 fread 不工作

c++ - 如何检测我的程序可用的堆栈空间量?

c++ - strcmp 比较不正确

c - evp_crypt 在 c 中的 for 循环中不起作用

php - fwrite 不会断行