c++程序找错,编译链接无错,运行出错

#include<iostream>#include<string.h>usingnamespacestd;classdatebase{public:datebase()... #include<iostream>
#include<string.h>
using namespace std;
class datebase
{public:
datebase();
char*name[50][20];
int date[50][50];
};
datebase::datebase()
{
char *name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
int date1[50][50]={{75,86,75,68,72,126,78},{81,76,79,84,200,320,97},{98,75,94,60,88,124,63},{84,74,85,34,56,112,54},{72,76,74,79,97,102,46},{78,75,64,96,240,324,99},{65,68,71,106,256,364,106},{88,92,93,55,86,120,24},{87,78,84,46,56,136,36},{91,89,76,65,75,214,41}};
for(int i(0);i<=10;i++)
{
strcpy(name[i][20],name1[i][20]);}
for(int j(0);j<50;j++)
{for(int k(0);k<50;k++)
{date[i][j]=date1[i][j]; }
}
}
void main()
{
datebase member;
}
展开
 我来答
仍枯群E
推荐于2016-04-25 · TA获得超过184个赞
知道答主
回答量:57
采纳率:0%
帮助的人:38.5万
展开全部
信息太少,程序做什么的,介绍下啊

char *name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};

name1这1000个指针中只有
{"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
前面 10个是分配了空间的

这个地方已经错了
for(int i(0);i<= 10;i++)
{
strcpy(name[i][20],name1[i][20]); //这个地方已经错了 [20]怎么会出现最大也因该是19

}
name[50][20]全部都是空指针 , 你试图将字符串拷贝到空指针中,所以出错

改为:
1。name 与 name1 中字符串位置一样的话改为

for(int i(0);i< 10;i++)
{
if( name1[0][i] == 0 ) continue ;
int Len = strlen( name1[0][i] ) + 1;
name[0][i] = new char [ Len ];
memset( name[0][i] , 0 , Len );
strcpy(name[0][i],name1[0][i]);
}

2。name 与 name1 中字符串位置不一样的话改为

for(int i(0);i< 10;i++)
{
if( name1[0][i] == 0 ) continue ;
int Len = strlen( name1[0][i] ) + 1;
name[i][0] = new char [ Len ];
memset( name[i][0] , 0 , Len );
strcpy(name[i][0],name1[0][i]);
}
PhateL
2010-07-23 · TA获得超过126个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:151万
展开全部
是不是运行后出现 内存不能为write

如果是 说明你代码逻辑或写法有错
编译只是检查语法的错误

一楼 warmwormn 答案为正解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang433
2010-07-23 · TA获得超过969个赞
知道小有建树答主
回答量:320
采纳率:0%
帮助的人:151万
展开全部
#include<iostream>
#include<string.h>
using namespace std;
class datebase
{public:
datebase();
char*name[50][20];
int date[50][50];
};
datebase::datebase()
{
char *name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
int date1[50][50]={{75,86,75,68,72,126,78},{81,76,79,84,200,320,97},{98,75,94,60,88,124,63},{84,74,85,34,56,112,54},{72,76,74,79,97,102,46},{78,75,64,96,240,324,99},{65,68,71,106,256,364,106},{88,92,93,55,86,120,24},{87,78,84,46,56,136,36},{91,89,76,65,75,214,41}};
for(int i(0);i<=10;i++)
{
strcpy(name[i][20],name1[i][20]); //问题应该出在这里,把[20]动去掉应该可以了。
}
for(int j(0);j<50;j++)
{for(int k(0);k<50;k++)
{date[i][j]=date1[i][j]; }
}
}
void main()
{
datebase member;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gword
2010-07-23 · 超过30用户采纳过TA的回答
知道答主
回答量:139
采纳率:0%
帮助的人:116万
展开全部
strcpy(name[i][20],name1[i][20]);
此句话中 name内的指针都是野指针,mei没有初始化 也没有指向任何内存
并且 ][20] 明显越界访问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
warmwormn
2010-07-23 · TA获得超过739个赞
知道小有建树答主
回答量:1694
采纳率:0%
帮助的人:1414万
展开全部
char *name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
--》
char name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式