chức năng của tôi:trong C: Tại sao cấu trúc phân bổ ngăn xếp tồn tại bên ngoài hàm?
struct hostent * gethost(char * hostname){
if(/*some condition under which I want
to change the mode of my program to not take a host*/){
return null
}
else{
struct hostent * host = gethostbyname(hostname);
return host;
}
}
trong chính:
struct hostent * host = gethost(argv[2]);
(bỏ qua bất kỳ lỗi nhỏ trong các mã, tôi phun từ bộ nhớ)
này hoạt động tốt. và Valgrind không nói với tôi rằng tôi đang mất trí nhớ, mặc dù thực tế tôi không giải phóng.
Tại sao? Tôi nghĩ rằng công cụ được phân bổ trên ngăn xếp biến mất với các cuộc gọi chức năng trở về? hay là vì tôi trả lại con trỏ? điều này có nguy hiểm không?
Ah cảm ơn rất nhiều. Vì vậy, nó duy nhất cho 'gethostbyname'? nếu tôi đã làm điều này cho một 'char *', ví dụ, các giá trị trong mảng đó có thể được ghi đè sau này? Chương trình của tôi chỉ phải xử lý một máy chủ cho mỗi lần chạy, vì vậy điều này sẽ ổn. –
Cho dù giá trị được trỏ đến bởi một con trỏ sẽ bị ghi đè lên các cuộc gọi sau sẽ phụ thuộc vào chức năng bạn đang gọi hay không. Đối với bất kỳ hàm thư viện chuẩn C nào trả về một con trỏ mà bạn không truyền vào, bạn có thể giả định nó trả về một con trỏ tới bộ nhớ tĩnh và nó có thể bị ghi đè. – Gabe