gpt4 book ai didi

c - 动态分配数组,更改和显示它存储的值

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:51 25 4
gpt4 key购买 nike

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

  • INITIALIZE(创建一个包含 N 个元素的 char 数组),FINALIZE(释放为数组分配的内存)
  • DUMP(显示此时存储在数组中的所有值)
  • ALLOC(分配一定数量的char元素给用户,让他可以在里面存储一些值)

我遇到了 DUMP 和 ALLOC 函数的问题:DUMP 不打印存储在数组中的值(而是打印一些垃圾值),而且我找不到如何修改存储在数组中的值(需要分配)。

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

#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 和调用函数:初始化(N, &v),finalize(&v)转储(&v,N)N 是数组要存储的元素数。

最佳答案

既然要打印存储的元素,只需要传递一个指向指针的指针即可。只需传递指针:

char *v;
...
...
finalize(v);

并修改dump():

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] 访问错误,因为您要修改指针对象,而不是指针本身。

你可以修改它:

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;
}

关于c - 动态分配数组,更改和显示它存储的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com