指向数组的指针的Malloc-C ++

时间:2018-12-10 20:20:11

标签: c++ arrays pointers malloc

我有一个函数,它获取指向数组的指针作为参数, 例如int** segs。 我需要为数组分配(在功能体内)内存,例如,大小为100。 我的尝试是:

*segs=(int*)(malloc(100));

到目前为止,一切都很好。 我在*segs[0]中输入了一个值,但是一切仍然很好。 但是...当我尝试到达*segs[1]时,我从valgrind收到“大小为4的无效写入”错误,这将导致seg-fault。 我不知道为什么会这样。 我试图达到*segs[2],但后来我什至感到有些奇怪-

  

大小为8的未初始化值的错误。

1 个答案:

答案 0 :(得分:4)

由于operator precedence*segs[N]被视为*(segs[N]),当N等于0时可以。但是,当您使用索引1进行相同的操作时,事情会中断,因为没有为segs[1]

分配任何东西

对于除零以外的任何索引,您需要使用(*segs)[N]

在函数中使用临时指针会更容易。

int* ptr = (int*)(malloc(100));
*segs = ptr;

// and then

ptr[0] = ...;  // Good
ptr[1] = ...;  // Good

...


ptr[99] = ...; // Still good

升级到C ++方式

  1. 按引用传递指针。

    void foo(int*& segs) { ... }
    
  2. 使用new代替malloc分配内存。

    segs = new int[100];
    
  3. 更好的是,使用std::vector代替原始数组。

    void foo(std::vector<int>& segs) { ... }