gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:47 24 4
gpt4 key购买 nike

我的任务是读取一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com