Tôi có rất lạ vấn đề và vì tôi không thể gửi mã, tôi sẽ cố gắng giải thích.Làm thế nào để thay đổi nhỏ trong mã không bao giờ được thực hiện tạo nên sự khác biệt?
Điều này giống như vấn đề triết học - Tôi hy vọng ai đó có thời gian/kiến thức để suy nghĩ về điều này.
1) Tôi đã project.cpp tìm kiếm chính xác như thế này:
#include <pthread.h>
#include <unistd.h>
pthread_t pplayer_thread;
void *play(void*);
int main(int argc, char **argv) {
pthread_create(&pplayer_thread, NULL, play_cb, NULL);
usleep(5000000);
return 0;
}
2) pplayer.cpp tìm kiếm một cái gì đó như thế này:
...
void *play_cb(void *arg) {
// this starts movie using gstreamer and exits thread
}
...
3) not_executed _from_main.cpp tìm kiếm một cái gì đó như thế này:
...
extern MyClass *myObj; // this is included from .h file
...
MyClass *myObj = NULL;
...
some_function() {
...
myObj = MyClass::createNew(args);
...
}
...
Đây là tất cả linke d cùng với nhiều thư viện khác và tấn rác, nhưng điều này về cơ bản là điều quan trọng.
->Vấn đề:
Khi tôi chạy này, tôi sẽ thấy cửa sổ chơi movie clip sử dụng GStreamer trong 5 giây ->NHƯNG tôi chỉ nghe được âm thanh!
->Lạ một điều:
Khi tôi nhận xét dòng:
myObj = MyClass::createNew(args);
và chạy lại -> Tôi thấy cửa sổ GStreamer cũng (mọi thứ đều tốt)
->Ghi chú:
điều này có thể có thứ gì đó để làm với:
- quá trình liên kết và chất của MyClass và đó là tầng lớp phụ huynh (đoán tốt nhất của tôi)
- "tĩnh" từ khóa
- "bên ngoài" từ khóa
- C và C++ trộn
->Tôi hỏi một lần nữa:
Làm cách nào để thay đổi nhỏ trong mã không bao giờ được thực thi tạo nên sự khác biệt?
(xin giúp)
Các vấn đề về bộ nhớ có thể xảy ra, hãy kiểm tra với valgrind – academicRobot
Thử chạy chương trình dưới valgrind và xem liệu có bất kỳ ngăn xếp ngăn xếp/rò rỉ bộ nhớ nào/giải phóng đôi/. –
orlp
Không có sự khác biệt. Nhưng có vẻ như 'not_executed_from_main.cpp' của bạn đang tạo ra sự khác biệt mà bạn không biết. Có thể cho chúng tôi biết thêm về tệp .cpp và .h này không? –