在C语言中使用malloc做动态数组

问题描述 投票:0回答:2

我有下面这段代码。

当我迭代于 *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);
}
c segmentation-fault malloc
2个回答
2
投票

你的问题是相对优先的 *[] 运营商。你的行。

    *array[i] = '.';

是去引用(或试图)指针数组中的 "第i "元素。

你需要的是,访问数组中的 "第i "元素。尖对array 是这样的。

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

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


3
投票

索引运算符([])比去参照操作符(单利的 *). 事实上,最高运算符优先层由所有后缀运算符组成。 因此。

   *array[i] = '.'

相当于

   *(array[i]) = '.'

. 这在以下情况下是有效的 array[i] 有型 char *的操作数,在这个意义上,它是一个有效的操作数,对于单利的 *但对于 i 零以外的其他。array[i] 并没有指定一个有效的指针,因此试图取消引用它而导致一个 segfault 也就不足为奇了。

相反,你希望

   (*array)[i] = '.'

0
投票

分段故障是由于*array[i]=".",因为什么malloc只返回一个指向分配的内存起始地址的指针,你不能直接通过索引迭代。

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

© www.soinside.com 2019 - 2024. All rights reserved.