2012-08-08 34 views
7

chút này của mã C là đưa ra lỗi phân hóa trong gdbsigsev trên malloc đó là lái xe cho tôi hạt

if ((seq_entry_action=malloc((seq_subphases)*sizeof(int*)))==NULL){ 
    printf("Cannot allocate memory for seq_entry_action\n"); 
} 

nơi:

int **seq_entry_action=NULL; 
unsigned int seq_subphases=0; 

Tại thời điểm thực hiện, và nếu tôi ghi thêm một breakpoint trong gdb ngay trước đoạn mã này (chỉ là một câu lệnh printf() khác, các giá trị là

(gdb) p seq_subphases 
$3 = 88 
(gdb) p seq_entry_action 
$4 = (int **) 0x0 

then I p ress tiếp theo và nó segfaults tại malloc

tôi thực sự không có được nó .....

+11

Đó thường là do bạn đã làm hỏng heap của mình. Điều đó có nghĩa là lỗi có thể chỉ là về bất cứ nơi nào trong mã của bạn. Hãy thử 'valgrind'. – Mat

+1

Chạy đoạn mã đó dưới centos 6.2 và gcc phiên bản 4.4.6 và nó được biên dịch và chạy tốt có nghĩa là một nơi nào đó bạn đã làm hỏng heap của mình. –

+11

+1 để trở thành người đầu tiên ngày hôm nay trên SO người không bỏ giá trị trả lại của malloc. –

Trả lời

1

nó là như vậy thực sự ... một malloc trước của sizeof tính sai() là lý do malloc này thất bại .

Các vấn đề liên quan