2011-01-19 14 views
6

C99 [Mục 6.3.2.1/1] nóilvalue không chỉ định một đối tượng sau khi đánh giá?

Một vế trái là một biểu thức với một loại đối tượng hoặc một loại không đầy đủ khác hơn là còn thiếu; nếu một lvalue không chỉ định một đối tượng khi nó được đánh giá, hành vi không được xác định.

Phần nào trong đậm có nghĩa là gì? Ai đó có thể vui lòng giải thích nó với một ví dụ?

Trả lời

7

con trỏ Null, con trỏ đến deallocated đối tượng và con trỏ đến đối tượng với thời gian lưu trữ tự động mà cuộc đời đã kết thúc đến tâm. Dereferencing các kết quả này trong lvalues ​​không hợp lệ; các hành vi undefined bạn sẽ gặp phải thường xuyên nhất là segfaults nếu bạn may mắn, và heap tùy ý hoặc ngăn xếp tham nhũng nếu không.

5
#include <stdio.h> 

int* ptr; 

void f(void) { 
    int n = 1; 
    ptr = &n; 
} 

int main(void) { 
    f(); 
    // UB: *ptr is an lvalue that is not an object: 
    printf("%d\n", *ptr); 
    return 0; 
} 
Các vấn đề liên quan