注册 登录
编程论坛 C++教室

C++代码运行报错不知道哪里的问题

成cc 发布于 2022-01-29 17:45, 3328 次点击
新建了一个函数,函数参数包括了结构体的数组。在函数体内给结构体整形变量赋值时程序运行正常,但是给字符串变量赋值时程序运行报错。
程序代码:
#include<iostream>
using namespace std;
#include<string>


//创建学生的结构体
struct student
{
    //学生的姓名
    string sname;
    //成绩
    int score;

};

//创建老师的结构体
struct teacher
{
    //老师的姓名
    string Tname;
    //定义学生的结构体数组
    struct student stu[5];
};


//函数功能:给tea结构体数组赋值
void set(struct teacher tea[],int len)
{
   

    string s = "ABCDE";
    for (int i = 0; i < len; i++)
    {
        //tea[i].stu[i].sname = "aa";    //运行此行代码会报错
        tea[i].stu[i].score = 100;        //可以正常写值






        
//tea[i].Tname = "teacher_";
        
//tea[i].Tname += s[i];

        
//for (int j = 0; j < 5; j++)
        
//{
        
//    tea[i].stu[j].Sname = "student_";
        
//    tea[i].stu[j].Sname += s[j];

        
//    tea[i].stu[j].score = 60;

        
//}

    }

}





int main() {

    /*
    学校正在做毕业设计项目,每名老师带5位学生,总共3名老师,需求如下
      设计学生和老师的结构体,其中老师的结构体中,有老师的姓名和存放5名学生的数组作为成员
    ,学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值,
    最终打印出老师数据以及老师所带的学生数据。
   
*/

    //定义老师结构体数组
    struct teacher teaArray[3];

   
    //通过函数对老师数组赋值
    int len = sizeof(teaArray) / sizeof(teaArray[0]);    //计算数组的长度
    set(teaArray,len);




    //打印输出结果
   
//for (int i = 0; i < 3; i++)
   
//{
   
//   
   
//    for (int j = 0; j < 5; j++)
   
//    {
   
//        cout << "第" << i + 1 << "个老师及学生的信息";
   
//        cout <<  "老师的姓名:  " << tea[i].name << endl;
   
//        cout <<  "老师的第" << j+1 << "个学生的姓名"  << tea[i].stu[j].name << endl;
   
//        cout <<  "老师的第" << j + 1 << "个学生的成绩" << tea[i].stu[j].score << endl;
   
//    }
   
//}





   

    system("pause");
    return 0;
}
6 回复
#2
rjsp2022-01-29 18:40
没用的别贴,我帮你把代码中无用的行删除后,如下
#include <iostream>
#include <string>
using namespace std;

struct student
{
    string sname;
    int score;
};

struct teacher
{
    string Tname;
    struct student stu[5];
};

void set( struct teacher tea[], size_t len )
{
    for( size_t i=0; i!=len; ++i )
    {
        tea[i].stu[i].sname = "aa";    //运行此行代码会报错
        tea[i].stu[i].score = 100;
    }
}

int main()
{
    struct teacher teaArray[3];
    size_t len = sizeof(teaArray) / sizeof(teaArray[0]);
    set(teaArray,len);
}


虽然代码很奇怪,比如
    for( size_t i=0; i!=len; ++i )
    {
        tea[i].stu[i].sname = "aa";    //运行此行代码会报错
        tea[i].stu[i].score = 100;
    }

但只要你的 struct teacher teaArray[3]; 不超过5个元素,那它并没有语法和逻辑错误。

你还是把你出错的代码的贴出来看看吧,没错的就别贴了
#3
成cc2022-01-29 23:36
回复 2楼 rjsp
程序运行到函数体内,执行“tea[i].stu[i].sname = "aa"; ”此行代码就报错了把变量i换成常数0也是一样报错。
程序代码:

void set(struct teacher tea[],int len)
{
   
    for (int i = 0; i < len; i++)
    {
        //tea[i].stu[i].sname = "aa";    //运行此行代码会报错
        tea[i].stu[i].score = 100;        //可以正常写值

    }

}


#4
成cc2022-01-30 00:10
回复 2楼 rjsp
错误信息如下:
0x0FEC373F (vcruntime140d.dll)处(位于 结构体.exe 中)引发的异常: 0xC0000005: 写入位置 0xCCCCCCCC 时发生访问冲突。 出现了
#5
rjsp2022-01-30 08:59
你贴会出错的代码,不要再贴不出错的代码了,就像我在二楼贴的代码那样。

或者,你拷贝、粘贴、运行我在二楼贴的代码(不要改代码),看看运行有错没错。
如果没错,那说明你的代码没有任何问题,因为我二楼贴的代码就是在一楼的代码基础上,擦除无用行,并上你说会出错的那行 所形成的。
#6
成cc2022-01-30 12:23
回复 5楼 rjsp
你好,2楼的程序我拷贝过去VS运行了但运行后还是会报同样的错误。我第二次发上来的代码就是运行错误的程序。因为我把    “tea[i].stu[i].sname = "aa";    //运行此行代码会报错”   这行程序注释了程序运行就没有报错了。


程序是运行到函数体内给sname赋值"aa"后才报错。
#7
成cc2022-01-30 15:23
回复 5楼 rjsp
可能是运行环境的问题,新建一个新的项目,重新运行这段程序就可以了。
1