Tôi nghĩ rằng tôi đã rút gọn đối với trường hợp cơ bản nhất:Malloc bên trong một cuộc gọi chức năng dường như được trả tự do khi trở về?
int main(int argc, char ** argv) {
int * arr;
foo(arr);
printf("car[3]=%d\n",arr[3]);
free (arr);
return 1;
}
void foo(int * arr) {
arr = (int*) malloc(sizeof(int)*25);
arr[3] = 69;
}
Kết quả là thế này:
> ./a.out
car[3]=-1869558540
a.out(4100) malloc: *** error for object 0x8fe01037: Non-aligned pointer
being freed
*** set a breakpoint in malloc_error_break to debug
>
Nếu bất cứ ai có thể làm sáng tỏ nơi hiểu biết của tôi là không, nó muốn được đánh giá cao.
Tôi có thể nói, vui lòng không truyền giá trị trả lại của malloc? Nó không phải là bắt buộc và có thể ẩn các lỗi. – freespace
@freespace, đó là một thói quen tôi đã phát triển qua nhiều năm. Mỗi một và sau đó tôi phải gửi mã của tôi thông qua các công cụ phân tích mã tĩnh, và họ phàn nàn về việc không đưa con trỏ. –
Xin lỗi vì đã để bạn treo mà không trả lời: không có cách nào tốt để tìm câu trả lời trong nhận xét trừ khi tôi bình chọn tất cả các ý kiến của tôi :) Tôi đã để lại câu trả lời trong http://stackoverflow.com/questions/108768/needless- pointer-casts-in-C# 108781 – freespace