首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态分配数组,更改并显示其存储的值。

问动态分配数组,更改并显示其存储的值。
EN

Stack Overflow用户
提问于 2015-12-06 15:09:10
回答 1查看 876关注 0票数 1

我正在尝试构建一个支持一些功能的粗犷内存分配器:

  • 初始化(创建包含N个元素的char数组),FINALIZE (释放分配给数组的内存)
  • 转储(此时显示存储在数组中的所有值)
  • ALLOC (向用户分配一定数量的char元素,以便他可以在其中存储一些值)

我遇到了转储和ALLOC函数的问题:转储不打印存储在数组中的值(它只打印一些垃圾值),而且我无法找到如何修改存储在数组中的值(ALLOC所需的)。

下面我发布了我的函数的源代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void initialize(int N, char **v)
{
    int i;
    *v = (char*)malloc(N * sizeof(char));
    printf("Initialized array with %d char elements \n", N);
    for(i = 0; i < N; i++)
    {
        v[i] = 0;
        printf("%hhd ", v[i]);
    }
}

void finalize(char *v)
{
    printf("Memory of the array has been freed \n");
    free(*v);
}

void dump(char **v, int N)
{
    int i;
    printf("Memory map:\n");
    for(i = 0; i < N; i++)
    {
        printf("%hhd ", v[i]);
    }
}

在我的主要函数中,我有char *v、int N和调用函数:initialize(N, &v)、finalize(&v)和dump(&v,N)。N是数组将要存储的元素数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-06 15:18:09

由于要打印存储的元素,所以只需将指针传递给指针即可。只需传递指针:

代码语言:javascript
复制
char *v;
...
...
finalize(v);

并修改dump()

代码语言:javascript
复制
void dump(char *v, int N)
{
    int i;
    printf("Memory map:\n");
    for(i = 0; i < N; i++)
    {
        printf("%c ", v[i]);
    }
}

类似地,您也不需要指向finalize()指针的指针。如果要修改指针(如initialize()中的指针),通常需要将指针传递给指针。

initialize()也有一个问题。这个v[i]访问错误,因为您希望修改切入点,而不是指针本身。

您可以修改它:

代码语言:javascript
复制
void initialize(int N, char **v)
{
    int i;
    char *t = malloc(N * sizeof(char));

    if (t == NULL) {/* error*/ }

    printf("Initialized array with %d char elements \n", N);
    for(i = 0; i < N; i++)
    {
        t[i] = 0;
        printf("%hhd ", t[i]);
    }
    *v = t;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34118905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档