Xét đoạn mã sau:C - Return một con trỏ char mà không malloc
char* pointerTesting(void) {
char* test = "hello";
return test;
}
int main() {
char* string = pointerTesting();
printf("string: %s\n", string);
}
này không có vấn đề biên dịch và chạy. Tuy nhiên, trong sự hiểu biết của tôi, điều này sẽ không hoạt động, vì bộ nhớ được cấp cho con trỏ test
nằm trên ngăn xếp và nó bị phá hủy khi trở về chính.
Vì vậy, câu hỏi đặt ra là, làm cách nào để quản lý hoạt động mà không có malloc trong hàm pointerTesting()?
Xem http://stackoverflow.com/questions/2589949/c-string-literals-where-do-they-go và một loạt các câu hỏi tương tự về chủ đề này trên stackoverflow. – jman
Con trỏ * được cấp phát trên ngăn xếp (để triển khai điển hình), nhưng bạn không trả lại con trỏ, chỉ sao chép nếu giá trị của nó. Nó tương tự như 'int n = 42; return n; '. Đó là việc phân bổ những gì nó trỏ đến đó là có liên quan. –