如何纠正警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

时间:2015-03-31 06:48:55

标签: 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;

我在delete (char*)m_buffer[i]收到编译器警告:

  

警告:从不同大小的整数[-Wint-to-pointer-cast]

转换为指针

我已经阅读了一些有关类似问题的其他问题,但我无法理解这些解决方案的适用方式。

更新 并回答评论
m_buffer初始化如下:

m_buffer = new char[m_size];

2 个答案:

答案 0 :(得分:7)

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

delete [] m_buffer;

无需单独删除其元素。

答案 1 :(得分:5)

delete旨在释放由new分配的对象。所以重要的问题是,你如何分配m_buffer? 在您当前的代码中,它似乎是一个数组,因为您在删除它之前迭代一个元素并将每个元素强制转换为char *。 如果您使用m_buffer分配了new m_buffer[m_size],那么正确的方法是delete[] m_buffer