gpt4 book ai didi

c++ - 警告 : pointer of type 'void *' used in arithmetic [-Wpointer-arith]|

转载 作者:行者123 更新时间:2023-11-27 23:35:44 38 4
gpt4 key购买 nike

请看下面的代码:

#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/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com