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…假设您分配了内存alam_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…假设您分配了内存alam_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。用词不当:)