Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带列表的C嵌套结构_C - Fatal编程技术网

带列表的C嵌套结构

带列表的C嵌套结构,c,C,我创建了用于存储随机数的10×10数组结构器。还列出了一个名单,这样每个成员将持有不同的10乘10。但是当我打印它的时候,数字有点坏了,我不知道我的for循环是不正确的还是有别的东西。我希望我把清单上的事情做对了 struct Num { int Numbers[10][10]; }; struct Hold { struct Num *List; }FullList; int main(void) { time_t t; int x; srand

我创建了用于存储随机数的10×10数组结构器。还列出了一个名单,这样每个成员将持有不同的10乘10。但是当我打印它的时候,数字有点坏了,我不知道我的for循环是不正确的还是有别的东西。我希望我把清单上的事情做对了

struct Num
{
    int Numbers[10][10];

};

struct Hold
{
    struct Num *List;
}FullList;


int main(void)
{
    time_t t;
    int x;
    srand((unsigned) time(&t));
    printf("Enter the number of arrays you want to create: ");
    scanf("%d", &x);

    FullList.List = malloc(x * sizeof(int));
    if (FullList.List == NULL) {
        fprintf(stderr, "Malloc failed.\n");
        exit(1);
    }
    int i, j, k;


    for(i=0;i<x;i++)
    {
        for(j=0;j<10;j++)
        {
            for(k=0;k<10;k++)
            {
                FullList.List[i].Numbers[j][k] = rand() % 255;

            }


        }
    }

    for(i=0;i<x;i++)
    {
        for(j=0;j<10;j++)
        {
            for(k=0;k<10;k++)
            {

                printf("%d  %d  %d  %d %d  %d  %d  %d  %d  %d \n", FullList.List[i].Numbers[j][k]);

            }


        }
    }

    return 0;
}
struct Num
{
整数[10][10];
};
结构保持
{
struct Num*列表;
}完整列表;
内部主(空)
{
时间;
int x;
srand((未签名)时间(&t));
printf(“输入要创建的数组数:”);
scanf(“%d”和&x);
List=malloc(x*sizeof(int));
if(FullList.List==NULL){
fprintf(stderr,“Malloc失败。\n”);
出口(1);
}
int i,j,k;

对于(i=0;i我假设
ImageList
是一个输入错误,您的意思是
FullList
,这就是我在示例中要使用的。如果是这种情况,那么您没有正确分配内存:

FullList.List = malloc(x * sizeof(int));
您为
x
int
对象分配了足够的空间,而不是
x
类型为
struct Num
的对象。您没有为您的预期用途分配足够的空间。更好的方法是

FullList.List = malloc( x * sizeof *FullList.List )
表达式
sizeof*FullList.List
相当于
sizeof(struct Num)
;这将为
x
struct Num
对象分配足够的空间,这就是您想要的。通常,您应该将
malloc
调用编写为

T *p = malloc( sizeof *p * N ); // for any non-function type T


始终检查
malloc
calloc
realloc
调用的结果。

我假设
ImageList
是一个打字错误,您的意思是
FullList
,这就是我在示例中使用的。如果是这种情况,那么您没有正确分配内存:

FullList.List = malloc(x * sizeof(int));
您为
x
int
对象分配了足够的空间,而不是
x
类型为
struct Num
的对象。您没有为您的预期用途分配足够的空间。更好的方法是

FullList.List = malloc( x * sizeof *FullList.List )
表达式
sizeof*FullList.List
相当于
sizeof(struct Num)
;这将为
x
struct Num
对象分配足够的空间,这就是您想要的。通常,您应该将
malloc
调用编写为

T *p = malloc( sizeof *p * N ); // for any non-function type T


始终检查
malloc
calloc
realloc
调用的结果。

ImageList.List=malloc(x*sizeof(int));
错误。应该是
ImageList.List=malloc(x*sizeof(struct Num))
您分配的金额太小了。另外,您应该检查
malloc
返回的值,以确保它不是
NULL
@TomKarzes您所说的太小是什么意思,那么我应该如何分配。感谢您的回答BTW请不要通过破坏您的帖子来为其他人做更多的工作。通过在tack Exchange network,您已根据授予Stack Exchange分发该内容的不可撤销权利(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非故意破坏版本是已分发的版本。因此,任何故意破坏行为都将被还原。如果您想了解有关删除帖子的更多信息,请参阅:@Carl看起来有人给了您答案,但关键是您为
x
整数分配了空间,但
x需要空间
struct Num的实例
。每个
struct Num
包含总共100个整数的数组。因此分配的大小至少太小了100倍。这是您真正需要了解的。
ImageList.List=malloc(x*sizeof(int));
是错误的。它应该是
ImageList.List=malloc(x*sizeof(结构数量))
您分配的金额太小了。另外,您应该检查
malloc
返回的值,以确保它不是
NULL
@TomKarzes您所说的太小是什么意思,那么我应该如何分配。感谢您的回答BTW请不要通过破坏您的帖子来为其他人做更多的工作。通过在tack Exchange network,您已根据授予Stack Exchange分发该内容的不可撤销权利(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非故意破坏版本是已分发的版本。因此,任何故意破坏行为都将被还原。如果您想了解有关删除帖子的更多信息,请参阅:@Carl看起来有人给了您答案,但关键是您为
x
整数分配了空间,但
x需要空间
struct Num的实例。每个
struct Num
包含总共100个整数的数组。因此,分配的大小至少太小了100倍。这是您真正需要了解的。感谢man的帮助,但打印的数字仍然错误,这是矩阵的第一行“28 0 9 6422048 0 6422048 4200281 1 34-1230284480”不知道这些数字来自何处。printf语句有许多格式说明符(%d),但只提供一个要打印的参数(FullList.List[i]。numbers[j][k])。其余的%d都有未定义的行为,所以只需在堆栈上打印随机值。根据您编写循环的方式,您希望您的打印只有一个%d。@噢,我怎么错过了那个感谢人。感谢人帮了很多忙,但打印的数字仍然错误,这是矩阵的第一行“28 0 9 6422048 0 6422048 4200281 1 34-1230284480“不知道这些数字来自何处。printf语句有许多格式说明符(%d),但只提供一个要打印的参数(FullList.List[i]。numbers[j][k])。其余的%d都有未定义的行为,所以只需在堆栈上打印随机值。根据您编写循环的方式,您希望您的打印只有一个%d。@噢,我怎么会错过这个呢?谢谢,伙计