我的代碼有一個線程連續處理由其他線程排隊的對象。排隊的對象是在函數中使用「new」創建的,該函數將在處理對象時完成。我沒有問題,但刪除對象。 我應該不刪除對象嗎?也許改變傳遞/創建這個對象的方式?刪除現有對象時出現分段錯誤
Object* myQueue[10];
function() {
Object* myobject = new Object();
queueObject(myobject);
}
queueObject(Object* object) {
myQueue[index_x] = object;
sem_post(&mySemaphore);
}
//// Thread 1
function();
...
//// Thread 2
handleObjects() {
while(true) {
sem_wait(&mySemaphore);
// handle myQueue[index_x]
delete myQueue[index_x]; ---> this produces Segmentation Fault
}
}
(index_x的治療不發佈到縮寫)
「index_x的處理」可能是重要的一部分;)我沒有看到你在這裏發佈的內容的任何錯誤。一些可能性:刪除對象後,您可能不會從myQueue中刪除對象(或者不要再次操作index_x,以免再次刪除對象); index_x可能超出範圍; etc. –
我可以在刪除它之前檢查它的屬性,所以索引是正確的 – funkadelic
刪除它之前它是有效的事實表明另一個線程在刪除操作的地址被計算之前使index_x無效... –