C语言 Realloc an int array



我正在尝试创建一个数组以保持int,然后当要添加另一个int时,将其增加了大小以保持另一个int ..等等。

我知道这不是对Realloc的有效利用,但它比其他任何事物都多。只是为了使其工作,我可以优化它并能够将其应用于有用的东西。一个工作示例。当我调用打印函数时,问题就到了,而只是segfaults。任何帮助,将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef char String[100];
void begin(int *);
void add(int *, int);
void print(int *);
int tempcount=0;
int main(void)
{
    int *n=NULL;
    String menu;
    begin(n);
    while(true)
    {
        scanf("%9s", menu);
        if(!strcmp("a", menu)) //add
        {
            int i=0;
            scanf("%d", &i);
            add(n, i);
        }
        else if(!strcmp("p", menu)) //print
        {
            print(n);
        }
        else if(!strcmp("q", menu)) //quit
        {
            free(n);
            break;
        }
    }
    return 0;
}
void begin(int *n)
{
    n=malloc(sizeof(int));
    if(n==NULL)
    {
        printf("Error in malloc!");
        return;
    }
    n[0]=0;
    printf("Added %d n", n[0]);
}
void add(int *n, int numToAdd)
{
    static int sizeCount=0;
    sizeCount++;
    tempcount=sizeCount;
    int *temp;
    temp=realloc(n, (sizeCount+1) * sizeof(int));
    if(temp==NULL)
    {
        printf("Error in realloc!");
        return;
    }
    n=temp;
    n[sizeCount]=numToAdd;
    printf("Added %d n", n[sizeCount]);
}
void print(int *n)
{
    int i;
    for(i=0; i<tempcount; i++)
    {
        printf("%d ", n[i]);
    }
}

您需要将指针传递给指针添加/开始,以便它们可以在Main

中修改您的指针
begin(&n);
...
add(&n, i);

和您的定义

void begin(int **n)
{
    *n=malloc(sizeof(int));
    if(*n==NULL)
    {
        printf("Error in malloc!");
        return;
    }
    (*n)[0]=0;
    printf("Added %d n", (*n)[0]);
}

void add(int **n, int numToAdd)
{
    static int sizeCount=0;
    sizeCount++;
    tempcount=sizeCount;
    int *temp;
    temp=realloc(*n, (sizeCount+1) * sizeof(int));
    if(temp==NULL)
    {
        printf("Error in realloc!");
        return;
    }
    *n=temp;
    (*n)[sizeCount]=numToAdd;
    printf("Added %d n", (*n)[sizeCount]);
}

现在,您正在做的是修改始于/添加指针的本地副本,因此,当您在这些功能中更改它时,它不会在Main

中修改指针n

另外,有趣的事实,如果您将NULL作为第一个参数传递给realloc,则其作用为malloc,因此,如果您将n初始化为CC_5,则可以简单地调用add而不首先执行begin

检查您的功能添加 - 确定您更新指针值吗?尝试**作为参数 - 我认为它会有所帮助。

相关内容

  • 没有找到相关文章

最新更新