Ý nghĩa chung của mã thoát 11 trong C là gì? Tôi đã nhìn xung quanh và không thể tìm thấy một câu trả lời dứt khoát vì vậy tôi nghĩ rằng tôi sẽ yêu cầu ở đây. Nó xuất hiện khi tôi cố gắng thêm một phần tử vào một vectơ.Ý nghĩa của mã số 11 trong C?
Trả lời
Không có tiêu chuẩn nào xác định mã thoát nào mà ứng dụng phải đặt trong một số trường hợp nhất định. Nó là hoàn toàn lên đến các lập trình viên mà xuất cảnh mã đại diện cho lỗi hoặc thậm chí thành công!
Đôi khi người lập trình quyết định rằng bất kỳ giá trị nào khác với tín hiệu bằng không đều là lỗi và đôi khi giá trị này bằng với mã lỗi của hệ điều hành.
Trên mã thoát Windows 11 có thể được sử dụng do sự cố với tệp. Nếu bạn muốn mô tả mã lỗi này (cụ thể cho Windows và không nhất thiết là ứng dụng của bạn) hãy chạy net helpmsg 11
.
Bạn không tìm thấy câu trả lời dứt khoát vì không có câu trả lời. Tùy thuộc vào tác giả của chương trình để quyết định mã số nào họ muốn sử dụng. Tiêu chuẩn C chỉ nói rằng exit(0)
hoặc exit(EXIT_SUCCESS)
cho biết rằng chương trình thành công và rằng exit(EXIT_FAILURE)
cho biết lỗi thuộc loại nào đó. (Trả lại một giá trị từ main
tương đương với việc gọi exit
với giá trị đó.) Các hệ điều hành phổ biến nhất bao gồm Windows, Linux, OSX, v.v. sử dụng 0 cho thành công và giá trị từ 1 đến 255 để cho biết lỗi; vẫn lựa chọn giữa các mã lỗi là đến các nhà văn ứng dụng, giá trị 11 không phải là bất cứ điều gì đặc biệt.
Trong Linux và hầu hết các biến thể Unix khác, số signal cho biết số segmentation fault, dưới dạng remarked by Kerrek SB. Một lỗi phân đoạn xảy ra khi một chương trình làm cho một số loại truy cập bộ nhớ không hợp lệ, vì vậy đó là một kết quả chính đáng khi truy cập một mảng ngoài giới hạn hoặc lỗi trong số học con trỏ hoặc cố gắng truy cập con trỏ null hoặc lỗi liên quan đến con trỏ khác. Tín hiệu 11 không giống như mã thoát 11: khi một chương trình chết do tín hiệu, nó được đánh dấu là đã bị một tín hiệu giết chết, thay vì thoát ra bình thường. Unix shell báo cáo tín hiệu bằng cách báo cáo một mã thoát là số tín hiệu cộng với 128, do đó 139 cho một lỗi phân đoạn.
Các câu trả lời khác đã bỏ lỡ sự mơ hồ có thể xảy ra trong cụm từ "mã thoát". Tôi nghi ngờ những gì bạn có nghĩa là bằng cách "mã thoát" là mã trạng thái lấy ra với gia đình wait
của syscalls, như trong:
/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d\n", status);
Nếu bạn làm điều gì đó như thế bạn có thể rất sẽ thấy "exit đang 11" nếu quá trình con segfaults. Nếu quá trình con thực sự được gọi là exit(11)
, bạn có thể thấy "mã thoát 2816" thay thế.
Sẽ tốt hơn nếu bạn gọi những thứ đó là "mã chờ" hoặc "trạng thái chờ" thay vì "mã thoát", để tránh nhầm lẫn với giá trị được chuyển đến thoát. Mã chờ chứa một vài mẩu thông tin được đóng gói cùng nhau thành một số nguyên duy nhất. Thông thường, bạn không nên nhìn trực tiếp vào số nguyên (như tôi đã làm ở trên trong đó printf
). Thay vào đó, bạn nên sử dụng các macro W*
từ <sys/wait.h>
để phân tích macro.
Bắt đầu với các macro WIF*
để tìm hiểu xem loại điều gì đã xảy ra, sau đó sử dụng thông tin đó để quyết định các macro khác W*
sử dụng để nhận chi tiết.
if(WIFEXITED(status)) {
/* The child process exited normally */
printf("Exit value %d\n", WEXITSTATUS(status));
} else if(WIFSIGNALED(status)) {
/* The child process was killed by a signal. Note the use of strsignal
to make the output human-readable. */
printf("Killed by %s\n", strsignal(WTERMSIG(status)));
} else {
/* ... you might want to handle "stopped" or "continued" events here */
}
- 1. Ý nghĩa của ".. ::." trong C#?
- 2. Ý nghĩa của "?" sau biến trong C#?
- 3. Ý nghĩa của dấu ngoặc đơn trong C++ và C
- 4. ý nghĩa của (số) & (-number)
- 5. Ý nghĩa của tệp .inl trong C++
- 6. Ý nghĩa của '==' trong C là gì?
- 7. ý nghĩa của C++ Lỗi std :: length_error
- 8. ý nghĩa của số 1e5 là gì?
- 9. Ý nghĩa của `_t` của` size_t` trong C là gì?
- 10. Ý nghĩa của một số hằng số Paint trong Android
- 11. C++: Ý nghĩa của const char * const *
- 12. Ý nghĩa của []
- 13. Ý nghĩa của "1ULL" trong ngôn ngữ lập trình c
- 14. Ý nghĩa của "EXPORT_SYMBOL" trong mã nhân Linux là gì?
- 15. Ý nghĩa của dòng mã sau trong opencv là gì?
- 16. Ý nghĩa của NULL! = Giá trị trong C++ là gì?
- 17. C++ 11 memory_order_acquire và memory_order_release ngữ nghĩa?
- 18. Ý nghĩa của !! javascript
- 19. Ý nghĩa của $ (OutDir)
- 20. Ý nghĩa của tham số trong URL Google Maps
- 21. Ý nghĩa của android.content.UriMatcher
- 22. Ý nghĩa của {*; } Trong ProGuard
- 23. Ý nghĩa của "." trong printf
- 24. Ý nghĩa của dòng mã assembler sau đây là gì?
- 25. Ý nghĩa của phương thức Thread.Join trong C# là gì?
- 26. ý nghĩa của (int &) chuyển đổi trong C++
- 27. Ý nghĩa của main_syntax
- 28. Ý nghĩa của "<-" trong Swift
- 29. Ý nghĩa của các giá trị phi số trong định nghĩa cạnh của XFL là gì?
- 30. Tham số ngoặc nhọn trong hàm dựng của C++ 11
Bạn có chắc chắn là "mã thoát" chứ không phải * tín hiệu 11 * không? –
Có lẽ bạn đang trộn mã thoát và mã trả lại hoặc thậm chí tín hiệu Kerrek đã đề cập. Hiển thị mã nguồn gây ra sự cố. – Marged
Nền tảng nào? Linux, Windows hay nói chung? –