我正在尝试构建一个支持一些功能的粗犷内存分配器:
我遇到了转储和ALLOC函数的问题:转储不打印存储在数组中的值(它只打印一些垃圾值),而且我无法找到如何修改存储在数组中的值(ALLOC所需的)。
下面我发布了我的函数的源代码:
#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是数组将要存储的元素数。
发布于 2015-12-06 15:18:09
由于要打印存储的元素,所以只需将指针传递给指针即可。只需传递指针:
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;
}https://stackoverflow.com/questions/34118905
复制相似问题