c语言 ...is used uninitialized in this function

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:58:40
int findWord(char dictionary[][WORDSIZE + 1], int wordCount,char matrix[5][5][2]) {

int i=0;
int x=0;
int m=0;
int n=0;
int total=0;
char *b; //////// 问题出在这里,不论怎么改都不行//////

for(m=0; m<5; m++){
for(n=0; n<3; n++){
for(x=0; x<3; x++){

*(b+x)=matrix[m][n+x][0];
*(b+x+1)=matrix[m][n+x+1][0];
*(b+x+2)=matrix[m][n+x+2][0];

}

*(b+x+2)='\0';

printf("%s",b);
*(b+x+2)='\0';

printf("%s",b);

for(i=0; i<wordCount; i++) {

if(strcmp(b, dictionary[i])==0) {

printf("%s = %d\n",b ,matrix[m][n][1]+matrix[m][n+1][1]+matrix[m][n+2][1]);
total = total + matrix[m][n][1]+matrix[m][n+1][1]+matrix[m][n+2][1];
x=0;

}else{}
}

}

}
......

这是我们作业的一部分,是让输入25张卡片,每张卡片是一个字母,并且对应不同的分值。把卡片放入一个5X5的矩阵里,然后程序会告诉你哪些字母连成了一个单词,然后把组成单词的字母的分值

典型的指针使用错误,你定义了一个指针变量,只能用来保存地址,如果这个地址所指向的空间不是系统分配给它的,那么你对这块内存的赋值是非法的,就好比你的“所作所为”:

char *b;

//下面的三重循环,你非法修改了至少 3*3*5 = 45 字节的内存值,要知道以前 windows 98 的蓝屏大部份是由于非法修改内存引起的,以后要小心~
for(m=0; m<5; m++){
for(n=0; n<3; n++){
for(x=0; x<3; x++){

*(b+x)=matrix[m][n+x][0]; //赋值没有错,但是是不被允许的,因为这块内存很可能是其它程序的资源
*(b+x+1)=matrix[m][n+x+1][0]; //一而再
*(b+x+2)=matrix[m][n+x+2][0]; //再而三

}

yi以前学过
不过全交给老师了