如何在C中的运行时声明全局指针? [关闭]

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

我是C的新手。我有一个简单的程序,该程序具有new()函数和delete()函数。而且由于我不知道添加的元素数量,因此决定为每个新元素在堆上动态分配内存。这是我的问题,一旦函数从堆栈中弹出,如果它是本地的,指向新分配的内存的指针就会丢失。我需要未知数量的全局指针。我可以这样做吗?

我不能使用外部文件或结构。

int main ()
{
login ();
choosetask; //functions are called from within this function upon user input
return 0;
}

char* new ()
{
char name [];
char address [];
char *ptr;

printf ("enter name");
scanf ("%s", &name);
printf ("enter address", address);
scanf ("%s", &address);

ptr = (char*) calloc (100, sizeof(char));
*ptr = name;
*(ptr+50) = address;
return ptr;
}
  1. 当我返回指针时,我必须将其分配给另一个指针,以便我可以重用该函数以生成新的指针,而不会丢失前一个指针,对吗?并且因为我不知道该函数将被重用多少次,所以我不知道应该声明指针的数量。
  2. 为了程序,我需要全局指针。
  3. 我认为代码在这里不重要。这是一个普遍的问题。另外,大约有200行。
c pointers dynamic-memory-allocation
1个回答
0
投票

动态地在调用者中分配一个指针数组。您可以根据需要使用realloc()调整大小。

#include <stdio.h>
#include <stdlib.h>

struct a {
     char name[20];
     char address[20];
};

char* new (void)
{
    struct a *ptr = calloc (1, sizeof(struct a));

    printf ("enter name");
    scanf ("%s", ptr->name);

    printf ("enter address");
    scanf ("%s", ptr->address);

    ptr = (char*) calloc (100, sizeof(char));
    return ptr;
}

int main (void)
{
   struct a **p_a = malloc (sizeof (struct a*) * 10);

   p_a[0] = new();
   p_a[1] = new();
   p_a[2] = new();
   p_a[3] = new();

   ....

   // If the amount of pointers in the array isn´t enough allocate 
   // more memory for more pointers.

   realloc(p_a, sizeof (struct a) * 20);  

   p_a[10] = new();
   p_a[11] = new();
   p_a[12] = new(); 
}
© www.soinside.com 2019 - 2024. All rights reserved.