void solution3(){
char str[100];
int height, width;
printf("가로와 세로 길이를 입력 : ");
scanf("%d %d", &width, &height);
FILE* fp = fopen("lena_256x256.raw", "rb");
//2dynimic
unsigned char **p = new unsigned char*[height];
for(int i = 0; i < height; i++) *(p + i) = new unsigned char[width];
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++)
fread((void*)p[i][j], sizeof(unsigned char), height * width, fp);
}
//print
for(int i = 0; i < height; i++){
for(int j = 0; j < width; j++)
printf("%4d ", p[i][j]);
}
//del dynimic
for(int i = 0; i < height; i ++) delete[] p[i];
delete[] p;
fclose(fp);
}
void main(){
solution3();
}
错误消息是“ string!= NULL”,为什么无法读取.raw文件?
我尝试p[i][j]
修复(void*)p[i][j]
。但不能。
我想阅读.raw并打印有关.raw灯的信息
答案 0 :(得分:4)
代码在这里具有未定义的行为:
unsigned char **p = new unsigned char*[height]; .... fread((void*)p[i][j], sizeof(unsigned char), height * width, fp);
p
是char的指针。这意味着p[i][j]
是一个字符,代码将其强制转换为(void*)
。这是fread
试图写入的无效地址。
您可能想要:
for(int i = 0; i < height; i++){
if (fread((void*)p[i], 1, width, fp) != width)
{
manage the error condition
}
}
除此之外,建议不要直接使用new / delete,在这种情况下std :: vector会更安全。另外,void main()
是错误的,应改为int main()
。