我正在使用使用多个缓冲区的c ++程序,并且在运行该程序几分钟后遇到段错误。我不确定执行此操作的正确方法。我认为给我带来错误的代码目前是这样的:

int *myBuf1, *myBuf2;
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = myBuf1;
// do work

if(myBuf1) {
    free(myBuf1);
}
myBuf1 = NULL;
myBuf2 = NULL;


我的第一个问题是:通过赋值“ myBuf2 = myBuf1”,myBuf2是否使用sizeof(int)* maxPacketSize分配不同的内存块,还是仅指向myBuf1分配的同一块内存的指针?

其次,我应该同时释放myBuf2和myBuf1,然后将它们都设置为NULL吗?上面,我只释放myBuf1。或者,最好这样做:

myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = (int*)malloc(sizeof(int) * maxPacketSize);


然后都释放吗?

最佳答案

问:分配为“ myBuf2 = myBuf1”时,myBuf2是否分配了一个
  不同的内存块?


答:不可以


  问:其次,我应该同时释放myBuf2和myBuf1吗?


答:不可以。一个malloc(),一个free()。

Q: [Should I] then set both to NULL?


答:是的,我强烈建议将ALL指针设置为NULL。

09-08 10:16