动态阵列中的seg故障(C)
为什么我得到一个segfault错误,因为动态阵列中的seg故障(C),c,malloc,C,Malloc,为什么我得到一个segfault错误,因为*a[1]=1即使我已经用malloc在堆上为它分配了空间 void d(int **a, int count){ *a = malloc(sizeof(int)*count); *a[1]=1; } int main(){ int count =10; int *a; d(&a, count); } 根据,您的赋值操作*a[1]=1相当于*(a[1])=1。如果您打算先取消引用a,然后访问索引1处的
*a[1]=1代码>即使我已经用malloc在堆上为它分配了空间
void d(int **a, int count){
*a = malloc(sizeof(int)*count);
*a[1]=1;
}
int main(){
int count =10;
int *a;
d(&a, count);
}
根据,您的赋值操作*a[1]=1
相当于*(a[1])=1
。如果您打算先取消引用a
,然后访问索引1处的元素,则应包括括号以明确您的意图:(*a)[1]=1
根据,您的赋值操作*a[1]=1
相当于*(a[1])=1
。如果您打算先取消引用a
,然后访问索引1处的元素,则应包括括号以明确您的意图:(*a)[1]=1
*a[1]=1
可能没有执行您认为它正在执行的操作。由于用于索引的括号的优先级高于解引用,因此可以将其视为将a
视为指向整数的指针数组,并在解引用之前尝试访问其第二个元素以获取其指向的整数,而不是指向整数数组的指针。由于情况并非如此,因此可能会出现错误,因为可能存在一些错误的地址,然后在该位置取消引用
但是,如果您将其更改为(*a)[1]=1代码>,指针首先被解除引用,并且分配给它的内存被正确索引。*a[1]=1
可能没有执行您认为它正在执行的操作。由于用于索引的括号的优先级高于解引用,因此可以将其视为将a
视为指向整数的指针数组,并在解引用之前尝试访问其第二个元素以获取其指向的整数,而不是指向整数数组的指针。由于情况并非如此,因此可能会出现错误,因为可能存在一些错误的地址,然后在该位置取消引用
但是,如果您将其更改为(*a)[1]=1代码>,指针首先被解除引用,分配给它的内存被正确索引。两个答案都指向正确的方向。运算符优先级。这只是你必须学习的东西之一(不幸的是,大多数教程都忽略了这一点),这两个答案都为你指明了正确的方向。运算符优先级。这只是你必须学习的东西之一(不幸的是,大多数教程都忽略了这一点)