#include <iostream>
#include <string>
using namespace std;
struct MyStruct1 {
string Parameter1;
int Parameter2;
double Parameter3;
};
struct MyStruct {
string Parameter1;
int Parameter2;
double Parameter3;
MyStruct1 St;
};
void Lesson6_Log(MyStruct *S);
void Lesson6_Log2(MyStruct S);
void main() {
//结构体数组
MyStruct SS[3] = {
{"a",1,2,{"a",5,6}},
{"b",4,5,{"b",7,8}},
{"c",7,8,{"c",10,11}}
};
Lesson6_Log(&SS[0]);
Lesson6_Log(&SS[1]);
Lesson6_Log(&SS[2]);
//结构体指针
MyStruct* mystruct = &SS[1];
mystruct->Parameter1 = "aaa";
mystruct->Parameter2 = 123;
mystruct->Parameter3 = 123.321;
mystruct->St.Parameter1 = "bbb";
mystruct->St.Parameter2 = 456;
mystruct->St.Parameter3 = 456.654;
Lesson6_Log(mystruct);
Lesson6_Log2(*mystruct);
system("pause");
}
void Lesson6_Log(MyStruct * S) {
cout << "Parameter1 is:" <<S->Parameter1 << endl;
cout << "Parameter2 is:" << S->Parameter2 << endl;
cout << "Parameter3 is:" << S->Parameter3 << endl;
cout << "S.St.Parameter1 is:" << S->St.Parameter1 << endl;
cout << "S.St.Parameter2 is:" << S->St.Parameter2 << endl;
cout << "S.St.Parameter3 is:" << S->St.Parameter3 << endl;
cout << "-------------------------------------------" << endl;
}
void Lesson6_Log2(MyStruct S) {
cout << "Parameter1 is:" << S.Parameter1 << endl;
cout << "Parameter2 is:" << S.Parameter2 << endl;
cout << "Parameter3 is:" << S.Parameter3 << endl;
cout << "S.St.Parameter1 is:" << S.St.Parameter1 << endl;
cout << "S.St.Parameter2 is:" << S.St.Parameter2 << endl;
cout << "S.St.Parameter3 is:" << S.St.Parameter3 << endl;
cout << "-------------------------------------------" << endl;
}
运行后提示59行:0x7B5CFD0E (ucrtbased.dll) (StudyNotes.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00400000 时发生访问冲突
加断点显示Lesson6_Log2函数内部局部变量S的St内部所有内容都是错的。
这是为什么呀?
定义结构体变量,应该在前面加上struct 关键字。
直接复制代码在VS2010下运行,没有任何毛病啊
你是在什么环境下运行的呢
看似没什么问题啊!