为函数中的结构内部的指针分配内存

时间:2015-06-07 15:58:26

标签: c pointers memory-management struct

我们假设我声明了一个结构如下:

typedef struct {
    int *numbers;
    int size; // Size of numbers once treated as array
} sstruct;

我使用main()sstruct *example;中创建了一个指向结构的指针(以便稍后通过引用传递它)。

然后我有一个函数,称之为allocpositions(),我假装为*p中包含的*example指针分配内存位置。

如果我想要将位置分配到*example,则应该将方向&example传递给函数,该函数会将其作为**a接收,然后执行a = (sstruct **)malloc(N*sizeof(sstruct *))之类的操作{1}},但我不知道如何直接在函数内部*p分配。

分配后,我仍然可以将*p中的元素作为example->p[index]内的allocpositions()引用吗?

我很感激任何帮助!

修改

示例代码说明了我尝试实现的目标:

typedef struct {
    int *numbers;
    int size; // size of numbers once treated as array
} ssm;

main() {
    ssm *hello;
    f_alloc(&hello);
}

void f_alloc(ssm **a) {
    // Here I want to allocate memory for hello->p
    // Then I need to access the positions of hello->p that I just allocated
}

1 个答案:

答案 0 :(得分:2)

带注释的代码:

void f_alloc(ssm **a) {

    *a = malloc(sizeof(ssm)); // Need to allocate the structure and place in into the *a - i.e. hello in main
    (*a)->p = malloc(sizeof(int)); // Allocate memory for the integer pointer p (i.e. hello ->p;
}

修改

我认为这就是你的要求:

void f_alloc(ssm **a, unsigned int length) {

    *a = malloc(sizeof(ssm)); // Need to allocate the structure and place in into the *a - i.e. hello in main
    (*a)->p = malloc(sizeof(int) * length); // Allocate memory for the integer pointer p (i.e. hello ->p;
    (*a)->v = length; // I am assuming that this should store the length - use better variable names !!!
}

然后设置/获取

的功能
bool Set(ssm *s, unsigned int index, int value) {
   if (index >= s->v) {
       return false;
   }
   s->p[index] = value;
   return true;
}

bool Get(ssm *s, unsigned int index, int *value) {
   if (index >= s->v) {
       return false;
   }
   *value = s->p[index];
   return true;
}

我向读者留下免费的位。

编辑2

我心情很好。

void Resize(ssm**a, unsigned int new_length)
{
   (*a)->p = relloc((*a)->p, sizeof(int) * new_size);
   (*a)->v = new_length;
}
void Free(ssm *a)
{
   free(a->p);
   free(a);
}

你可以让它更容错以检查malloc/realloc是否有效