指针数组 - 内存分配

极客

我是指针数组的新手(将函数放入数组)并使用 malloc 为其分配内存。你能帮我处理这段代码吗?有函数:int comp_int(int a, int b); int comp_int_abs(int a, int b); int comp_int_length(int a, int b); int comp_int_digits_sum(int a, int b);并希望将指向这些函数的指针放在指针数组中。首先想为数组动态分配内存并将函数的指针放入其中。卡在这个地方,我做错了什么?

int (**funcs)(int, int) = malloc(4*sizeof(int));

if(!*funcs)
{
    printf("Failed to allocate memory");
    return 8;
}

*funcs={add_int, sub_int, div_int, mul_int};
三聚氰胺

首先,为什么要分配动态内存?

如果您使用普通数组,事情会变得简单一些:

int (*funcs[])(int, int) = {
    comp_int,
    comp_int_abs,
    comp_int_length,
    comp_int_digits_sum,
};

如果您想使用动态分配,则需要注意一些事项。

int (**funcs)(int, int) = malloc(4 * sizeof *funcs);

首先,我们需要分配适量的内存。通过乘以解引用指针的大小,我们不必担心动态数组的元素类型。(但是如果我们想手动编写类型,它会是sizeof (int (*)(int, int)),而不是sizeof (int)像您的代码中那样;我们数组的元素是指向函数的指针,而不是整数。)

然后我们检查分配失败:

if (!funcs) {

注意:我们检查指针本身 ( funcs),而不是像您的代码 ( *funcs)中的动态数组的第一个元素(可能不存在!)。如果malloc失败并返回NULL!*funcs则将尝试取消引用空指针,这很可能会使您的程序崩溃。

    fprintf(stderr, "Failed to allocate memory\n");

错误信息转到stderr,而不是stdout行以 结束'\n'

    return 8;
}

由于我们这里没有真正的数组,我们不能使用初始化语法。特别是,= {在赋值表达式中无效。

最直接的解决方案是手动分配元素:

funcs[0] = comp_int;
funcs[1] = comp_int_abs;
funcs[2] = comp_int_length;
funcs[3] = comp_int_digits_sum;

这有点容易出错,因为我们必须手动指定每个索引。但是,我们可以将其与上面的“普通数组”代码结合起来:

int (*const funcs_init[])(int, int) = {
    comp_int,
    comp_int_abs,
    comp_int_length,
    comp_int_digits_sum,
};

int (**funcs)(int, int) = malloc(sizeof funcs_init);
if (!funcs) { ... }

memcpy(funcs, funcs_init, sizeof funcs_init);

我们只是像往常一样初始化我们的数组(这里称为funcs_init),然后使用 将内容复制到我们动态分配的内存中memcpy

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指针数组的动态内存分配

来自分类Dev

指针数组的动态内存分配

来自分类Dev

传递指向数组的指针并分配内存

来自分类Dev

指针数组中有多少内存分配

来自分类Dev

不分配内存分配的指针

来自分类Dev

指针内存分配

来自分类Dev

分配“ this”指针的内存

来自分类Dev

如何在整数指针数组中分配内存?

来自分类Dev

在C中的结构内的指针数组的动态内存分配

来自分类Dev

C指针(数组)的内存分配(十六进制)

来自分类Dev

动态为int的指针数组分配内存

来自分类Dev

C中结构指针的内存分配数组

来自分类Dev

如何为字符指针数组分配内存?

来自分类Dev

对象数组的内存分配

来自分类Dev

对象数组的内存分配

来自分类Dev

相邻数组的内存分配

来自分类Dev

双指针和内存分配

来自分类Dev

指针的c ++内存分配过程

来自分类Dev

如何为指针分配内存

来自分类Dev

指针内存分配和删除

来自分类Dev

如何将内存分配给void函数指针的数组并为数组分配地址

来自分类Dev

指向结构指针的指针中的内存分配

来自分类Dev

如何为指向指针的指针分配内存?

来自分类Dev

了解char数组内存分配

来自分类Dev

内存分配和char数组

来自分类Dev

大数组如何分配内存?

来自分类Dev

内存分配与数组大小定义

来自分类Dev

使用数组分配内存

来自分类Dev

大数组如何分配内存?