0
下面的代碼根據我如何定義newImagesData給出了seg.fault(參見下面的註釋)。如果是數組一切都OK,但如果定義爲指針 - 故障:(C++動態內存分配問題
//Mat newImagesData[FIFO_SIZE]; // Mat is a class from opencv
Mat* newImagesData;
void func1()
{
...
newImagesData = (Mat*)malloc(FIFO_SIZE * sizeof(Mat)); //if *newImagesData
fifoInit(&newImagesFB, newImagesData, FIFO_SIZE);
...
}
void fifoInit(FIFOBuffer* fifo, Mat* imageData, int size)
{
fifo->data = imageData;
fifo->end = 0;
}
void fifoWrite(FIFOBuffer* fifo, Mat* frame)
{
fifo->data[fifo->end] = *frame; // seg fault with *newImagesData ; OK with newImagesData[]
memcpy(&fifo->data[fifo->end], frame, sizeof(Mat)); // OK with *newImagesData
...
}
如果我使用memcpy(),它工作正常 我能明白我做錯了任何幫助
確實。使用new和delete操作符保證構造函數和析構函數被調用,如果使用malloc爲類對象分配內存,則不會發生這種情況。 – Kourosh
感謝您的答案:)但爲什麼它與memcpy()工作? – user2443309
@ user2443309可能只是純粹的運氣。它看起來像*未定義的行爲*。 – juanchopanza