繁体   English   中英

代码似乎正确,但是程序在打印数组的第一行后挂起

[英]Code seems correct but the program hangs after printing the first row of the array

我正在尝试使用指针实现矩阵。 该代码似乎正确,但是程序在打印数组的第一行后挂起。

int main ()
    {
        int **a;
        int i,j;
        int count = 1;

        for (i = 0; i < 4; i++)
        {
            for(j = 0; j < 4; j++)
            {
                *(*(a + i) + j) = count;
                count += 1;
                printf("%d\t", *(*(a + i) + j));
            }
        }
    }

这将起作用!

#include<stdio.h>
#include<stdlib.h>
int main ()
{
    int **a;
    int i,j;
    int count = 1;
    // Allocate memory and populate 
    a = malloc(4*sizeof(int*));
    for (i = 0; i < 4; i++)
    {
        a[i] = malloc(4*sizeof(int));
        for(j = 0; j < 4; j++)
        { 
            *(*(a + i) + j) = count;
            count += 1;
            printf("%d\t", *(*(a + i) + j));
        }
        printf("\n");
    }
    //Now free the allocated memory
    for ( i = 0; i < 4; i++)
    {
        free(a[i]);
    }
    free(a);
    return 0;
}

**a只是一个指向指针的指针,但是在您的代码中,您尚未指定该指针应指向的位置。

首先,您需要在使用内存之前分配内存,然后执行所需的操作(填充,读取,写入等),然后,当不再需要它时,请释放已分配的内存。

为了使代码有机会工作,您必须为数组分配空间,并为指针分配空间。 例如:

#include <stdio.h>

int main(void)
{
    int   m[4][4];
    int  *p[4] = { m[0], m[1], m[2], m[3] };
    int **a = p;
    int count = 1;

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            *(*(a + i) + j) = count++;
            printf("%d\t", *(*(a + i) + j));
        }
        putchar('\n');
    }
    return 0;
}

还有其他指定mp 例如:

int m[16];
int *p[4] = { &m[0], &m[4], &m[8], &m[12] };

您的代码缺少的是内存分配。 当你说int** a; 您只会得到双指针变量,它应该指向的指针没有空格,中间指针应该指向的整数也没有空格。 取消引用此类未初始化的指针是未定义的行为。

现在,在C中分配矩阵的最简单方法是分配这样的数组数组:

int main() {
    int n = 4, count = 1;
    int (*matrix)[n] = malloc(n*sizeof(*matrix));
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            matrix[i][j] = count++;
        }
    }
    free(matrix);
}

malloc()分配内存, free()返还内存,以便可以重用。 matrix是指向matrix的行数组的指针, malloc()调用为matrix指向的n元素分配足够的内存(在这种情况下, n元素的n n行数组)。 您不能更简洁地进行分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM