dcy_xm
2015-11-23 07:26
采纳率: 40%
浏览 2.3k

C++ delete 释放内存 不行

for(i = height*(width/1201+1);i > 0;i--)
{
QByteArray datagram;
datagram.resize(width+11);
for(j = width+12;j >= 0;j--)
{
datagram[j] = sendbuffer[i][j];
}
sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,1234);
delete[]senderbuffer[i];
}
delete[]senderbuffer;

请问我这样释放内存为何不行?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • Meditator_hkx 2015-11-23 08:45
    已采纳

    delete sendbuffer[i] 不就行了~

    点赞 评论
  • 别了疯子 2015-11-23 08:14

    for(i = height*(width/1201+1);i > 0;i--)
    {
    QByteArray datagram;
    datagram.resize(width+11);
    for(j = width+12;j >= 0;j--)
    {
    datagram[j] = sendbuffer[i][j];
    }
    sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,1234);
    delete[]senderbuffer[i];
    }
    delete[]senderbuffer;

    疑问:senderbuffer是new出来的吗?
    enderbuffer是二维指针?

    点赞 评论
  • John_ToString 2015-11-25 05:17

    在二维数组里面,senderbuffer[i];代表senderbuffer[i][0];的首地址,本质上是列指针,虽然他在数值上跟senderbuffer;以及&senderbuffer[i][0];相等,但是他所指向的不是一个数组,而是一个确定的元素,而对于一个并非指向数组的指针做如此操作是非法的(delete[] senderbuffer[i];)

    点赞 评论

相关推荐 更多相似问题