用malloc填充数组可能分配的内存比需要的内存少
我想知道我为什么会有这种行为: 这是我正在使用的代码:用malloc填充数组可能分配的内存比需要的内存少,c,arrays,pointers,C,Arrays,Pointers,我想知道我为什么会有这种行为: 这是我正在使用的代码: matriz2= (float**) malloc (sizeof(float**)); for (int m=0;m<36;m++) { matriz2[m]=(float *) malloc(36*sizeof(float*)); } for (int k=0;k<36;k++) { for (int l=0;l<36;l++) { matri
matriz2= (float**) malloc (sizeof(float**));
for (int m=0;m<36;m++)
{
matriz2[m]=(float *) malloc(36*sizeof(float*));
}
for (int k=0;k<36;k++)
{
for (int l=0;l<36;l++)
{
matriz2[k][l]=i;
i++;
printf("%f\n ",matriz2[k][l]);
}
}
我已经检查了一些关于malloc所做的内存分配的事情
如果matriz2[m]=float*malloc36*sizeoffloat*,则以下代码运行良好;我把浮球*malloc35*sizeoffloat*
但如果我用34岁就不会这样了
我还检查了以下代码是否有效,实际上它可以将所有3s更改为4s,但有5个代码失败:
matriz2= (float**) malloc (sizeof(float**));
for (int m=0;m<3;m++)
{
matriz2[m]=(float *) malloc(sizeof(float*));
}
for (int k=0;k<3;k++)
{
for (int l=0;l<3;l++)
{
matriz2[k][l]=i;
i++;
printf("%f\n ",matriz2[k][l]);
}
}
虽然我从malloc那里了解到,它不应该能够填充数组,应该会发生分段错误
为什么我可以这样填充数组
谢谢。您的初始malloc太小了35倍:您的代码
matriz2= (float**) malloc (sizeof(float**));
for (int m=0;m<36;m++) {
matriz2[m]=(float *) malloc(36*sizeof(float*));
}
如果现在有一个这样的行序列,每个行的类型都是float*,则需要为这样的指针序列分配空间,即malloc 36*sizeoffloat*,结果是指向该指针序列的第一个指针的指针。因此,结果类型为float**:
然后,您可以为每行保留空间并为其分配:
float **matrix = malloc(36 * sizeof(float*)) // sequence of pointers to rows
for (int m=0;m<36;m++) {
matrix[m]=malloc(36*sizeof(float)); // row, i.e. sequence of floats
}
希望有帮助。matriz2=float**malloc sizeoffloat**;->matriz2=float**malloc 36*sizeoffloat*;,matriz2[m]=malloc36*sizeoffloat*;->matriz2[m]=malloc36*sizeoffloat;
float **matrix = malloc(36 * sizeof(float*))
float **matrix = malloc(36 * sizeof(float*)) // sequence of pointers to rows
for (int m=0;m<36;m++) {
matrix[m]=malloc(36*sizeof(float)); // row, i.e. sequence of floats
}