将malloc用于C中的动态数组



我有下面这段代码。

当我在第一次迭代后对*attachmentsArray进行迭代时,即使是size==3,我也会出现segferred。我在这里做错了什么?

void secondary(char** array, long size)
{
*array = (char*)malloc(size*sizeof(char));
for(int i = 0; i < size; i++)
{
*array[i] = '.';
}
}
void main()
{
char* attachmentsArray;
long size = 3;
secondary(&attachmentsArry, size);
}

索引运算符([](的优先级高于解引用运算符(一元*(。实际上,最高的运算符优先级由所有后缀运算符组成。因此,

*array[i] = '.'

相当于

*(array[i]) = '.'

这是有效的,因为表达式array[i]的类型为char *,从这个意义上说,它是一元*的有效操作数,但对于除零之外的iarray[i]不会指定有效指针,尝试取消引用它会导致segfault也就不足为奇了。

相反,你想要

(*array)[i] = '.'

问题在于*[]运算符的相对优先级。您的线路:

*array[i] = '.';

正在取消引用(或试图(指针数组中的"ith"元素。

要访问array指向的数组的"第i个"元素,您需要的是:

(*array)[i] = '.';

请随时要求进一步澄清和/或解释。

分段错误是由于*array[i]=".",因为malloc只返回一个指向所分配内存起始地址的指针,所以不能直接通过索引进行迭代器。。

其他答案也是正确的,但您也可以通过增加指针来指向相应的地址块,如*array="."*数组++;

相关内容

  • 没有找到相关文章

最新更新