我覺得像兩個代碼段都在做同樣的事情,但一個賽格故障ç賽格故障分配通過功能的陣列時和打印陣列
代碼1:本印刷精美
int main(){
int n = 3;
int i;
int *arr = (int *) malloc(sizeof(int) * n);
int * can_arr;
arr[0] = 3;
arr[1] = 2;
arr[2] = 1;
arr[3] = 2;
can_arr = arr;
for(i = 0; i <= n; i++)
printf("%d ", can_arr[i]);
return 0;
}
代碼2:我在打印時出現seg故障
void get_arr(int n, int *arr, int *can_arr){
can_arr = arr;
}
int main(){
int n = 3;
int i;
int *arr = (int *) malloc(sizeof(int) * n);
int * can_arr;
arr[0] = 3;
arr[1] = 2;
arr[2] = 1;
arr[3] = 2;
get_arr(n, arr, can_arr);
for(i = 0; i <= n; i++)
printf("%d ", can_arr[i]);
return 0;
}
爲什麼?兩個都在做can_arr = arr?我正在做我需要這個數組賦值的代碼中的其他東西。我在這裏簡化了它。那麼爲什麼它會出現問題?
「代碼1:此打印精」 - 嗯我不敢苟同。 'arr [3] = ...'全部由它自己調用*未定義的行爲。你的數組只有** 3 **元素,每個malloc的大小。因此僅從「0..2」索引。因此,你的代碼調用*未定義的行爲*,超出這一點的任何東西都是毫無意義的分析。 – WhozCraig