我有下面这段代码。
当我迭代于 *attachmentsArray
在第一次迭代后,即使 size==3
.我在这里做错了什么?
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] = '.';
是去引用(或试图)指针数组中的 "第i "元素。
你需要的是,访问数组中的 "第i "元素。尖对 由 array
是这样的。
(*array)[i] = '.';
请随时要求进一步的澄清和解释。
索引运算符([]
)比去参照操作符(单利的 *
). 事实上,最高运算符优先层由所有后缀运算符组成。 因此。
*array[i] = '.'
相当于
*(array[i]) = '.'
. 这在以下情况下是有效的 array[i]
有型 char *
的操作数,在这个意义上,它是一个有效的操作数,对于单利的 *
但对于 i
零以外的其他。array[i]
并没有指定一个有效的指针,因此试图取消引用它而导致一个 segfault 也就不足为奇了。
相反,你希望
(*array)[i] = '.'
分段故障是由于*array[i]=".",因为什么malloc只返回一个指向分配的内存起始地址的指针,你不能直接通过索引迭代。
其他答案也是正确的,但你也可以通过增量指针来指向相应的地址块,比如*array = "."; *array++。