C++ 如何更正警告:从不同大小的整数转换为指针[-Wint转换为指针]

C++ 如何更正警告:从不同大小的整数转换为指针[-Wint转换为指针],c++,arrays,pointers,gcc,destructor,C++,Arrays,Pointers,Gcc,Destructor,我有一个带有缓冲区的类,该缓冲区后来在读取文件时填充: char* m_buffer; 。。。在类析构函数中,我执行以下操作: int i; for(i=0; i < m_size; i++) { delete (char*)m_buffer[i]; } delete m_buffer; 如果m_buffer是一个数组,则只需使用: delete [] m_buffer; 无需单独删除其元素。如果m\u buffer是一个数组,则只需使用: delete [] m_buffer;

我有一个带有缓冲区的类,该缓冲区后来在读取文件时填充:

char* m_buffer;
。。。在类析构函数中,我执行以下操作:

int i;
for(i=0; i < m_size; i++) {
  delete (char*)m_buffer[i];
}
delete m_buffer;

如果
m_buffer
是一个数组,则只需使用:

delete [] m_buffer;

无需单独删除其元素。

如果
m\u buffer
是一个数组,则只需使用:

delete [] m_buffer;

无需单独删除其元素。

delete
旨在释放new分配的对象。所以重要的问题是,如何分配
m_缓冲区
? 在您当前的代码中,它似乎是一个数组,因为在删除它之前,您对其中的元素进行迭代,并将每个元素强制转换为
char*

如果您使用
new m\u buffer[m\u size]
分配
m\u buffer
,则正确的方法是
delete[]m\u buffer

删除
旨在释放new分配的对象。所以重要的问题是,如何分配
m_缓冲区
? 在您当前的代码中,它似乎是一个数组,因为在删除它之前,您对其中的元素进行迭代,并将每个元素强制转换为
char*

如果您使用
新的m\u buffer[m\u size]
分配
m\u buffer
,那么正确的方法是
删除[]m\u buffer

m\u buffer[i]
char
m_buffer
在析构函数中指向什么类型的对象?另外,考虑使用<代码> STD::vector < /代码>。是的,你应该删除一个指针,不要把字符转换成指针…char sizeof是1,指针可能是4或8…假设您分配了内存ala
m_buffer=new char[n]
,您不需要
删除
缓冲区中
m\u buffer
分别指向的每个字符:只需
delete[]m\u buffer
,或者更好的方法-按值使用
std::string
。@juanchopanza:
char
。。。我正在使用
std::ifstream
读取一个文件,并声明
m\u buffer=new char[m\u size]
@IAbstract:您的理解是错误的:实际指针
m\u buffer
应该在包含它的对象,无论是因为它是一个超出范围的局部变量,还是因为它是一个动态分配的变量,即
delete
d;无论哪种方式,您都不必单独释放包含
m\u buffer
的类的每个数据成员。“不是单个指针”-为什么指针是复数
m_buffer
表面上是指向
char
数组的一个指针
m_buffer[i]
char
m_buffer
在析构函数中指向什么类型的对象?另外,考虑使用<代码> STD::vector < /代码>。是的,你应该删除一个指针,不要把字符转换成指针…char sizeof是1,指针可能是4或8…假设您分配了内存ala
m_buffer=new char[n]
,您不需要
删除
缓冲区中
m\u buffer
分别指向的每个字符:只需
delete[]m\u buffer
,或者更好的方法-按值使用
std::string
。@juanchopanza:
char
。。。我正在使用
std::ifstream
读取一个文件,并声明
m\u buffer=new char[m\u size]
@IAbstract:您的理解是错误的:实际指针
m\u buffer
应该在包含它的对象,无论是因为它是一个超出范围的局部变量,还是因为它是一个动态分配的变量,即
delete
d;无论哪种方式,您都不必单独释放包含
m\u buffer
的类的每个数据成员。“不是单个指针”-为什么指针是复数
m_buffer
表面上是一个指向
char
数组的指针,“没有必要…”,这样做是错误的。@juanchopanza Rigth。用词不当:)“没有必要……”,这样做是错误的。@juanchopanza Rigth。用词不当:)