- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请看下面的代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
class ex
{
public:
int x;
int y;
double z;
ex()
{
cout<<"constructor";
}
~ex()
{
cout<<"destructor";
}
};
int main()
{
void *pt=malloc(sizeof(ex)*2);
ex *p,*p1;
p=new(pt) ex();
p1=new(pt+sizeof(ex)) ex();
p->x=4444;
p->y=3333;
p->z=65.87879898;
p1->x=55555;
p1->y=66666;
p1->z=6666.6666666;
cout<<"\nP: "<<p->x<<"\n"<<p->y<<"\n"<<p->z<<"\n";
cout<<"\np1: "<<p1->x<<"\n"<<p1->y<<"\n"<<p1->z<<"\n";
p->~ex();
p1->~ex();
free(pt);
return 0;
}
显示警告。 警告:算术中使用了“void *”类型的指针 [-Wpointer-arith]|
有任何方法可以克服这个问题,或者代码是错误的。注意:该代码显示正确的输出。
感谢您的帮助。
最佳答案
这一行有问题:
pt+sizeof(ex)
因为 pt
是一个 void*
,所以不知道一个元素的大小是多少。一些编译器会将其编译为就好像大小为 1,这会使您的代码成功运行。但这不符合标准。相反,这样做:
p+1
也就是说,使用第一个元素之后的一个元素(类型ex
)的内存地址。
或者,转换为 char*
这样您就知道您正在使用大小为 1 的元素:
static_cast<char*>(pt)+sizeof(ex)
关于c++ - 警告 : pointer of type 'void *' used in arithmetic [-Wpointer-arith]|,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59342033/
这段代码: void Pack::packUInteger(void **buffer, unsigned int payload){ memcpy(*buffer, &payload, si
GCC 文件说 -Wpointer-arith 警告任何依赖于函数类型的“大小”或“void”的内容。 GNU C 将这些类型的大小指定为 1,以方便使用“void *”指针和函数指针进行计算。在 C
到目前为止,我在 Isabelle 遇到的每个目标都可以使用 arith 解决。也可以通过 presburger 解决反之亦然,例如 lemma "odd (n::nat) ⟹ Suc (2 * (n
我需要使用标准库中称为 Coq.Arith.PeanoNat ( https://coq.inria.fr/library/Coq.Arith.PeanoNat.html ) 的部分。 我尝试过导入整
请看下面的代码: #include #include using namespace std; class ex { public: int x; int y; doub
我正在制作一个 C++ 程序,但我有一个不断出现的警告(我正在使用 g++): warning: pointer to a function used in arithmetic [Wpointer-
我知道这个问题已经得到了部分回答 here on S.O. ,但他们在那里解释了算术溢出期间发生的什么。在 S.O. 的其他地方他们解释 how to check for overflow在 java
我是一名优秀的程序员,十分优秀!