30/09/2018, 21:58
Lỗi giải phóng mảng 2 chiều cấp phát động
mình có cấp phát động một mảng các ký tự như code bên dưới, dùng con trỏ cấp 2, tuy nhiên bị lỗi khi giải phóng bộ nhớ, không biết bị lỗi gì mong được giải đáp và cho mình biết cách giải phóng nó, mình cám ơn trước.
int main()
{
char** mang = NULL;
int dong = 3;
int cot = 10;
mang = (char**)malloc(sizeof(char*)* dong);
for (int i = 0; i < dong; i++){
mang[i] = (char*)malloc(sizeof(char) * cot);
}
char line[100] = "GETabc_/cat.html_HTTP/1.1";
mang[0] = strtok(line, "_");
for (int i = 1; i < 3; i++){
mang[i] = strtok(NULL, "_");
}
for (int i = 0; i < dong; i++){
printf("%d ", strlen(mang[i]));
printf("%s
", mang[i]);
}
for (int i = 0; i < dong; i++){
free(mang[i]);
}
free(mang);
system("pause");
return 0;
}
Bài liên quan
This post was flagged by the community and is temporarily hidden.
Cám ơn bạn đã trả lời, nhưng ở đây nếu chưa cấp phát được? Thì nó sẽ báo lỗi ở hàm strtok rồi, nhưng mình vẫn in ra được 3 mảng ký tự mà bạn?
Bạn không cần phải cấp phát và giải phóng từng
mang[i]
bởi vì hàmstrtok
sẽ trả về địa chỉ con trỏ của kí tự trongline
sau khi phân tách ra. Ta có thể kiểm tra2 cái này cũng trả về là địa chỉ của line. Mà line là mảng tĩnh nên việc giải phóng là bị lỗi. Việc cáp phát tương tự cũng không cần thiết
Cám ơn bạn gió, nhờ cái này mà mình đã hiểu rõ hơn về hàm strtok.