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;
    }
Tao Không Ngu. viết 00:13 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

kiencon viết 00:03 ngày 01/10/2018

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?

Gió viết 00:04 ngày 01/10/2018

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àm strtok sẽ trả về địa chỉ con trỏ của kí tự trong line sau khi phân tách ra. Ta có thể kiểm tra

printf("%p %p\n",line,mang[0]);

2 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

kiencon viết 00:02 ngày 01/10/2018

Cám ơn bạn gió, nhờ cái này mà mình đã hiểu rõ hơn về hàm strtok.

Bài liên quan
0