2D矩阵存储器写入失败

时间:2013-06-15 18:26:09

标签: c

#include <stdio.h>
#include <malloc.h>
char * define_row(int n)
{
    char * row=(char *)calloc(sizeof(char),n);
    row[0]='5';
    return row;

}


char ** define_matrix(int n,int m)
{
    char ** rows=(char **)calloc(sizeof(char),n);
    int i;
    for(i=0;i>0;i++)
    {
        rows[i]=define_row(m);
    }
    return rows;
}
void main()
{
    int n=5,m=5;
    char **k;
    k=define_matrix(n,m);
    printf("%d",&k[0][0]);

}

代码应该为矩阵NxM的大小分配内存,但我现在测试它为5x5。 在运行代码时,它会像我应该的那样打印0,但是当我添加

void main()
{
    int n=5,m=5;
    char **k;
    k=define_matrix(n,m);
    k[0][0]=5;
    printf("%d",&k[0][0]);

}

它突然在中途崩溃,我的代码出了什么问题?

3 个答案:

答案 0 :(得分:2)

首先,所有:

for (i = 0; i > 0; i++)
看起来很奇怪。它可能导致未定义的行为,因为i可能会溢出。

您可能更愿意写:

for (i = 0; i < n; i++)

此外,您没有分配足够的内存来使用rows[i]sizeof(char)是一个字符(1个字节)的大小,但rows[i]是指针。

char **rows = calloc(sizeof(char), n);

可能会成为:

char **rows = calloc(sizeof *rows, n); /* ie sizeof(char *), n */

答案 1 :(得分:1)

这是一个问题。你的行:

char ** rows=(char **)calloc(sizeof(char),n);

应该是:

char ** rows=(char **)calloc(sizeof(char*),n);

因为您将地址填充到为您分配8位值的数组位置。

答案 2 :(得分:0)

<{1}}中的

for循环不会终止。

您需要更改

define_matrix

for(i=0;i>0;i++)
{
    rows[i]=define_row(m);
}