#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]);
}
它突然在中途崩溃,我的代码出了什么问题?
答案 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)
for
循环不会终止。
您需要更改
define_matrix
到
for(i=0;i>0;i++)
{
rows[i]=define_row(m);
}