警告处理为错误这里有什么问题

Warning treatment as an error what is problem here?

本文关键字:什么 问题 这里 错误 处理 警告      更新时间:2023-10-16

这一行有什么问题

char* buffer = (char*)malloc(height * widthStep * 1.2);

当我试图编译它时,我不能得到以下消息

...
PNGSave.h(144): error C2220: warning treated as error - no 'object' file generated
PNGSave.h(144): warning C4244: 'argument': conversion from 'double' to '::size_t', possible loss of data
...

我试图在项目c++->中禁用警告处理;treatment(NO(,并试图在这行代码周围添加#pragma,但无济于事。

我做错了什么?

正如其他人所说,问题是必须传递malloc和integer,因为分配例如1.2字节是没有意义的。

即使有这个消息,代码也会正常编译和运行:这是一个警告,而不是错误。但您一定已经打开了将警告视为错误的功能(线索是错误消息明确地"告诉"您这一点!(,这就是为什么它根本没有编译的原因。如果你没有打开它,那么分配的金额将从你要求的数字四舍五入,因为这就是浮点数转换为整数的方式,例如

char* x = malloc(3.7);

将生成等效代码:

char* x = malloc(3);

如果你对这种行为满意,那么你可以通过添加一个cast:来避免警告——在你的情况下,这将允许代码编译

char* buffer = (char*)malloc((size_t)(height * widthStep * 1.2));

几乎可以肯定的是,你想向上取整而不是向下取整,而且可能根本不想在计算中使用浮点数:

char* buffer = (char*)malloc((height * widthStep * 6 + 4) / 5);

更重要的是,您可能根本不想在C++中使用malloc:

std::vector<char> buffer((height * widthStep * 6 + 4) / 5);

你做错了两件事。

首先,你没有正确禁用警告将警告视为错误=否应解决此问题。我对你的代码做了一个测试,它帮我修复了它。所以无论你在尝试什么,你都没有做对。

但你真正做错的是试图分配一小部分内存。不能分配五分之一字节。这个主意太奇怪了,我不知道该怎么办。不管怎样,我相信你知道你在做什么,所以选择一些将浮点数转换为整数的方法,警告就会消失。

1.2文字是double,但malloc函数需要::size_t(至少是整型(值。试着解决这个问题。

编辑

请注意,该程序只能分配离散量的内存。无法分配1.2字节的内存。