Đây là một thử nghiệm suy nghĩ, không phải mã sản xuất cũng như kiểu mã hóa tốt.Mã C này có phải là hành vi được xác định không?
Giả sử chúng ta có chức năng này
int find_process_pid_by_name(char* name, int* threads_in_process);
mà trả lại PID của một quá trình có tên và cũng luôn lưu trữ vào threads_in_process
số lượng đề chạy trong quá trình nói.
Một lập trình viên lười biếng, chỉ quan tâm trên PID, viết mã này
int pid = find_process_pid_by_name("a process name", &pid);
Liệu nó gây ra hành vi không xác định?
Tôi đoán nếu bạn truy cập 'threads_in_process [i], i = 1,2,3..' trong hàm' find_process_pid_by_name' của bạn sẽ là hành vi không xác định! – user007
Nó được xác định rõ. Như đã đề cập trong các câu trả lời, có một điểm trình tự ngay trước khi hàm quay trở lại, có nghĩa là bất kỳ tác dụng phụ nào trước đó đã xảy ra. –
Nghiêm túc, bạn đang chuyển một 'const char *' thành một hàm nhận 'char *'; nếu hàm sửa đổi những gì được truyền, bạn sẽ nhận được hành vi không xác định. –