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



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

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

到目前为止还不错。我给*segs[0]加了一个值,但仍然一切都很好。但是当我试图到达*segs[1]时,我从valgrind得到一个"大小为4的无效写入"错误,这导致了seg故障。我不知道为什么会发生这种事。我试着联系*segs[2],但后来我得到了更奇怪的东西——

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

由于运算符的优先级,*segs[N]被视为*(segs[N]),当N等于0时,这是可以的。然而,当您使用索引1执行相同的操作时,由于没有为segs[1]分配任何内容,因此情况会中断

对于除零以外的任何索引,都需要使用int** segs0。

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

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) { ... }
    

相关内容

  • 没有找到相关文章

最新更新