【发布时间】:2016-09-25 18:27:28
【问题描述】:
我觉得两个代码 sn-ps 正在做同样的事情,但一个 seg 错误
代码 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:打印时此段出错
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?我在我的代码中做其他需要这个数组分配的事情。我只是在这里简化了它。那么为什么会出现段错误呢?
【问题讨论】:
-
"code 1: this prints fine" - 嗯,我不敢苟同。
arr[3] = ...自己调用未定义的行为。根据malloc的大小,您的数组只有 3 个元素宽。因此仅从0..2索引。因此,您的代码调用了未定义的行为,超出该点的任何内容都无法分析。
标签: c arrays segmentation-fault