在c中重新填充2D数组

时间:2016-01-08 16:20:20

标签: c arrays pointers

我有两个2d阵列" a"," b" (空数组)具有相同的大小,我必须改变" a"由于某个功能在" b"中保存了它的新值,我必须根据相同的功能更改新值,这样程序将保存b的新值在一个然后回到一个。 当打印阵列时,只打印前两个!!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MSIZE 10

void new_gen(char * a[MSIZE],int s,char** b);      /*the function we talked                     about*/
void print_m(char** b,int s);   /*prints matrix*/
void cpy_m(char** b, char** a, int s);

int main()
{
    int Size, gen, i, j;
    printf("Enter number of generations\t");   
    scanf("%d", &gen);
    printf("\nEnter size of the matrix (max size is %d and min is 2)\t", MSIZE);
    scanf("%d", &Size);
    char **m = (char**) malloc(Size*sizeof(char*));
    for (i=0; i<Size; i++)
    {
        m[i] = (char*) malloc(Size*sizeof(char));
    }
    printf("Enter matrix of first generation\n");
    for (i=0; i<Size; i++)  {
        for (j=0; j<Size; j++)  {
            scanf(" %c", &m[i][j]);
        }
    }
    print_m(m, Size);

    for (i=1; i<gen; i++)
    {
        char **n = (char**) malloc(Size*sizeof(char*));
        for (i=0; i<Size; i++)
        {
            n[i] = (char*) malloc(Size*sizeof(char));
        }
        new_gen(m, Size, n);
        print_m(n, Size);
        cpy_m(n, m, Size);

    }
    return 0;   }


void print_m(char** b, int s)
{
    int i, j;
    putchar('\n');
    for (i=0; i<s; i++)
    {
        for (j=0; j<s; j++)    {
            printf("%c", *(*(b+i)+j));
        }
        putchar('\n');
    }
    return;
}


void cpy_m(char* b[MSIZE],char** a, int s)
{
    int i, j;
    for (i=0; i<s; i++) {
        for (j=0; j<s; j++) {
            *(*(a+i)+j) = b[i][j];
        }
    return;
}}

1 个答案:

答案 0 :(得分:0)

考虑这对嵌套循环

for (i=1; i<gen; i++)
{
    char **n = (char**) malloc(Size*sizeof(char*));
    for (i=0; i<Size; i++)
    {
        n[i] = (char*) malloc(Size*sizeof(char));
    }
    new_gen(m, Size, n);
    print_m(n, Size);
    cpy_m(n, m, Size);
}

首先,两个循环都使用i作为控制变量,但它们是嵌套的。

第二点,你在每次迭代中覆盖malloc的指针(没有free)。