
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;
} 展开
#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;
} 展开
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]);
}
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]);
}
展开全部
是不是运行后出现 内存不能为write
如果是 说明你代码逻辑或写法有错
编译只是检查语法的错误
一楼 warmwormn 答案为正解
如果是 说明你代码逻辑或写法有错
编译只是检查语法的错误
一楼 warmwormn 答案为正解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcpy(name[i][20],name1[i][20]);
此句话中 name内的指针都是野指针,mei没有初始化 也没有指向任何内存
并且 ][20] 明显越界访问
此句话中 name内的指针都是野指针,mei没有初始化 也没有指向任何内存
并且 ][20] 明显越界访问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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"};
--》
char name1[50][20]={"18-8","20#","316L","1Cr18Ni9Ti","ODS","Fe","Cu","Al","Cr","Ni"};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询