无法从C中的结构打印字段

无法从C中的结构打印字段,c,printf,structure,C,Printf,Structure,我想制作一个带有“数字”结构元素的数字矩阵。当我试图打印“数字”时,程序不会退出printf函数。它会一直从printf中为我提供零。也许我分配错了?你知道吗 struct number { int theNumber; }; struct table { struct number ** mem; }; unsigned i; struct table *createInstance(unsigned min) { //flag1 struct table *

我想制作一个带有“数字”结构元素的数字矩阵。当我试图打印“数字”时,程序不会退出printf函数。它会一直从printf中为我提供零。也许我分配错了?你知道吗

struct number {
    int theNumber;
};

struct table {
    struct number ** mem;
};

unsigned i;

struct table *createInstance(unsigned min) {

//flag1
    struct table * someInstance = (struct table *) malloc(sizeof (struct table));

//flag2
    if (someInstannce == NULL) {
        return 0;
    }

//flag3
    someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **));

//flag4
    for (i = 0; i <= min; i++) {
        someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1);
    }

//flag5
    for (i = 0; i <= min; i++) {
        for (j = 0; j = 5; j++) {
            printf("%d", someInstannce->mem[i][j].theNumber);
        }
    }

    return someInstance;
}
结构编号{
整数;
};
结构表{
结构编号**mem;
};
未签名的i;
结构表*createInstance(未签名的最小值){
//旗子1
struct table*someInstance=(struct table*)malloc(sizeof(struct table));
//旗子2
if(someInstance==NULL){
返回0;
}
//旗子3
someInstance->mem=(结构编号**)malloc((最小值+1)*sizeof(结构编号**);
//旗子4
对于(i=0;i mem[i]=(结构表*)calloc(5,sizeof(结构编号*)+1);
}
//旗子5
对于(i=0;i mem[i][j]。编号);
}
}
返回某个实例;
}
这一行

for (j = 0; j = 5; j++)
j
夹紧到
5
,条件测试将为“true”,因为
5
为非0。循环将永远不会结束。请重试

for (j = 0; j < 5; j++)
您将强制转换为其他类型,并请求指针大小,而不是结构大小

someInstance->mem[i] = calloc(5, sizeof (struct number) + 1);

您应该为任何指针分配内存,该指针的某种类型的内容,例如int*i=malloc(sizeof(int))

请编辑

 someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **));


打印循环条件不好,j=5应该是j,因为这严格来说是C,您不能强制转换malloc返回值。您使用的是
someInstance
someInstance
。这些是打字错误,还是该名称的某个地方有另一个变量?这是“类似”的代码吗您的代码,但实际上不是您的代码?@sjsam:casting
void*
到其他指针是标准允许的3D。但是不鼓励这样做。注意:使用这些类型,您没有矩阵通常的2D数组。编译器警告可以帮助您避免编程错误。每一个半现代的编译器都会发出警告。请注意电子警告!
 someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **));
 someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number *));
 someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1);
 someInstannce->mem[i] = (struct number *) calloc(5, sizeof (struct number) + 1);