Vấn đề
Trong C, chương trình có chạy được nếu sử dụng mảng chưa khởi tạo?
Giải pháp
Nếu dùng mảng chưa khởi tạo, trình biên dịch không báo lỗi biên dịch hay lỗi thực thi.
Mảng chưa khởi tạo cho kết quả không thể đoán trước (giá trị rác).
Nên luôn khởi tạo phần tử mảng với giá trị mặc định.
Chương trình ví dụ
Chương trình C truy cập mảng chưa khởi tạo:
#include <stdio.h> int main(void){ int a[4]; int b[4] = {1}; int c[4] = {1,2,3,4}; int i; //biến đếm vòng lặp //in tất cả phần tử của các mảng printf("\nArray a:\n"); for( i=0; i<4; i++ ) printf("arr[%d]: %d\n",i,a[i]); printf("\nArray b:\n"); for( i=0; i<4; i++) printf("arr[%d]: %d\n",i,b[i]); printf("\nArray c:\n"); for( i=0; i<4; i++ ) printf("arr[%d]: %d\n",i, c[i]); return 0; }
Kết quả
Array a: arr[0]: 4195872 arr[1]: 0 arr[2]: 4195408 arr[3]: 0 Array b: arr[0]: 1 arr[1]: 0 arr[2]: 0 arr[3]: 0 Array c: arr[0]: 1 arr[1]: 2 arr[2]: 3 arr[3]: 4
Lưu ý
Nếu không khởi tạo mảng, mặc định in ra giá trị rác và không bao giờ báo lỗi.
Ví dụ khác:
Ví dụ
#include <stdio.h> int main(void){ int A[4]; int B[4] ; int C[4] = {1,2}; int i; //biến đếm vòng lặp //in tất cả phần tử printf("\nArray a:\n"); for( i=0; i<4; i++ ) printf("arr[%d]: %d\n",i,A[i]); printf("\nArray b:\n"); for( i=0; i<4; i++) printf("arr[%d]: %d\n",i,B[i]); printf("\nArray c:\n"); for( i=0; i<4; i++ ) printf("arr[%d]: %d\n",i, C[i]); return 0; }
Kết quả
Array a: arr[0]: 4195856 arr[1]: 0 arr[2]: 4195408 arr[3]: 0 Array b: arr[0]: -915120393 arr[1]: 32767 arr[2]: 0 arr[3]: 0 Array c: arr[0]: 1 arr[1]: 2 arr[2]: 0 arr[3]: 0