警告处理为错误这里有什么问题
Warning treatment as an error what is problem here?
这一行有什么问题
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
字节的内存。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了