在结构内打印任意大小的数组

醉酒棒棒糖

我真是机智在这里:)

我基本上是试图建立一个结构Foo,其中包含大小不确定的数组,然后使用单独的函数设置所述数组的值并进行打印。当我尝试打印时,在valgrind中,我不断收到“有条件的跳转或移动取决于未初始化的值”和“使用大小8的未初始化值”错误。

这是代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Foo {
    char *name; 
    int x;
    int y;
    int *array; //this is the problematic array
};

struct Foo *foo_maker(char *name, int x, int y, int array_size)
{
    int array[array_size];
    memset(array, 0, sizeof(array)); //initializing the array here, so why am i getting the errors? 


    struct Foo *a_foo = malloc(sizeof(struct Foo) + sizeof(array));

    a_foo->name = name;
    a_foo->x = x;
    a_foo->y = y;   
    a_foo->array = array;

    return a_foo;
}

void set_foo(struct Foo *a_foo, int array_size)
{
    int i;
    for(i = 0; i < array_size; i++)
        a_foo->array[i] =  1;
} 

void print_foo(struct Foo *a_foo, int array_size)
{
    int i;
    for(i = 0; i < array_size; i++)
        printf("%d\n", a_foo->array[i]);
}


void foo_killer(struct Foo *a_foo)
{
    free(a_foo);
}

int main(int argc, char *argv[])
{
    char *name = argv[1];
    int x = atoi(argv[2]);
    int y = atoi(argv[3]);
    int array_size = atoi(argv[4]);

    struct Foo *foo = foo_maker(name, x, y, array_size);
    set_foo(foo, array_size);   
    print_foo(foo, array_size);
    foo_killer(foo);

    return 0;
}

我不认为将a_foo-> array作为参数传递给其他功能不是问题,因为只有当我遇到未初始化的错误时才尝试打印数组。我什至尝试在foo_maker和set_foo中打印数组,两次都遇到相同的错误。

任何帮助,将不胜感激 :)

约翰·哈蒙德
int array[array_size];

该内存驻留在本地函数堆栈上,并且在函数返回后不再存在。

a_foo->array = array;

完成后,它将是指向您不再拥有的存储区域的指针foo_maker()

尽管在分配a_foo时分配数组内存,您可能需要:

a_foo->array = a_foo + 1;

这是一种不常见的指针算法,但是会导致a_foo-> array指向a_foo之后的内存。

如果您这样做,则将更容易理解:

int *array = malloc(sizeof(int) * array_size);
struct Foo *a_foo = malloc(sizeof(struct Foo));
a_foo->array = array;

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改结构内的数组大小

来自分类Dev

读取任意大小的任意数组

来自分类Dev

读取任意大小的任意数组

来自分类Dev

C - 在结构数组内打印二维数组的元素

来自分类Dev

结构内固定大小数组的内存分配

来自分类Dev

打印结构数组

来自分类Dev

打印结构数组

来自分类Dev

打印出结构数组的元素

来自分类Dev

如何打印结构和数组?

来自分类Dev

数组大小可变的结构

来自分类Dev

循环内的结构数组

来自分类Dev

循环内的结构数组

来自分类Dev

如何创建任意大小的多维数组?

来自分类Dev

Swift中的任意矩阵或数组大小

来自分类Dev

是否可以在运行时设置结构内数组的大小?

来自分类Dev

是否可以在运行时设置结构内数组的大小?

来自分类Dev

在lldb python中打印结构数组

来自分类Dev

Numpy结构化数组的打印精度

来自分类Dev

打印包含2d数组的结构

来自分类Dev

Numpy结构化数组的打印精度

来自分类Dev

递归打印结构数组中的数据

来自分类Dev

结构内的类对象数组

来自分类Dev

结构内的类对象数组

来自分类Dev

MATLAB Coder动态调整大小的结构数组

来自分类Dev

在函数中调整结构数组的大小

来自分类Dev

大小为1的数组与指向结构的指针

来自分类Dev

用通用大小对结构数组进行排序

来自分类Dev

对于数组,C ++中结构的大小(sizeof)与实际大小不符

来自分类Dev

从dirent结构中打印off_t文件大小