[英]Exception writing data into a new file
我的任务是读取一个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);
}
Howevr上面的代码在第一个循环中工作正常,但是在第二个循环中我遇到了异常
Access violation writing location 0x0092f000.
在fwrite(y, sizeof(unsigned char),1920*1080,myYUV);
行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()是否成功等)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.