读书人

关于动态数组的一个bug请大哥们指点

发布时间: 2013-01-23 10:44:49 作者: rapoo

关于动态数组的一个bug,请大哥们指点一下。。
本帖最后由 suck_more 于 2013-01-06 00:05:59 编辑 我写的关于动态数组的一个程序,请问各位大神,在create函数(第62行)中有个bug,我输入的row比col的数值大,一切正常,如果row比col小,程序就崩溃了。。请问问题出现在哪里了。。谢谢大哥们指点一下。。

#include <stdio.h> 
#include <stdlib.h>
#include <iostream>
class juzhen
{
public:
juzhen(int r,int c)
{
row = r;
col =c;
array=create(row,col);
printf("矩阵创建成功!\n默认值为:\n");
echo_screen();
}
~juzhen()
{
int i,j;
for(i=0;i<row;i++)
{
free(array[i]);//释放第二维指针
}
free(array);//释放第一维指针
}
int ** create(int r,int c);
void echo_screen();
void set();//修改制定单元的值
protected:
int row,col;
int **array;
};
void juzhen::set()
{
int r,c,value;
printf("请输入您要更新单元的行号:\n");
scanf("%d",&r);
printf("请输入您要更新单元的列号:\n");
scanf("%d",&c);
if(r<row && c<col)
{
printf("已经找到指定单元,请输入要更新的数据:");
scanf("%d",&value);
array[r-1][c-1] = value;
printf("更新成功!\n");
}
else
{
printf("找不到制定单元,请重新选择!\n");
}
}
void juzhen::echo_screen()
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
}
int ** juzhen::create(int r,int c)
{
int **array,i,j;
array = (int **)malloc(r * sizeof(int*));
for(i=0;i<c;i++)
{
array[i] = (int *)malloc(c * sizeof(int));
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
array[i][j] = i*c+j;
}
}
return array;
}
void menu()
{
printf("<<<<<功能菜单<<<<<\n");
printf("1.修改指定矩阵单元的值\n");
printf("2.显示至屏幕\n");
printf("2.输出矩阵至制定文件\n");
printf("3.Resize矩阵的行与列\n");
printf("请输入您的选择:");
}
int main()
{
int row,col,choice;
printf("请输入矩阵的row:");
scanf("%d",&row);
printf("请输入矩阵的col:");
scanf("%d",&col);
juzhen one(row,col);
while(1)
{
menu();
scanf("%d",&choice);
switch(choice)
{
case 1:one.set();break;
case 2:one.echo_screen();break;
}
}
return 0;
}


[解决办法]
第68行数组下标越界了,第 66 行的循环判断条件应为 i < r
[解决办法]
另外可以参考 http://blog.csdn.net/zhcosin/article/details/8275603
[解决办法]
引用:
第68行数组下标越界了,第 66 行的循环判断条件应为 i < r
+1
[解决办法]
引用:
第68行数组下标越界了,第 66 行的循环判断条件应为 i < r

++
[解决办法]
for(i=0;i<c;i++)
{
array[i] = (int *)malloc(c * sizeof(int));


}

for(i=0;i<r;i++)
{
array[i] = (int *)malloc(c * sizeof(int));
}
[解决办法]
类名能不能换换,,能不能用 Matrix 之类的。。
[解决办法]
“多一少一”问题占程序员常犯错误的10%以上!

读书人网 >C语言

热点推荐