如何在C++;? 目前我正在C++中对结构中的结构进行动态分配。所以,我制作了一个我认为可以动态分配的代码。 以下是我编写的代码: #include<iostream> using namespace std; int cnt = 0; struct num{ int x; int y; }; struct name { char Stu[30] = { 0 }; num *number; }; int input(int& a) { if (cnt == 0) { cout << "입력할 수 : "; cin >> a; cnt++; return a; } if (cnt == 1) { cout << "입력할 수 : "; cin >> a; cnt++; } } void input(char *pt) { if (cnt == 2) { cout << "입력할 글자 : "; cin >> pt; cnt++; } } int inputnum(int i) { cout << "할당할 숫자를 쓰시오 : "; cin >> i; return i; } void printdata(name *pSt, int i, int j) { cout << pSt[i].number[j].x << endl; cout << pSt[i].number[j].y << endl; cout << pSt[i].Stu << endl; } int main() { int num1 = 0; int num2 = 0; num1 = inputnum(num1); num2 = inputnum(num2); name* student = new name[num1]; for (int i = 0; i < num1; i++) { for (int j = 0; j < num2; j++) { student[i].number = new num[num2]; input(student[i].number[j].x); input(student[i].number[j].y); input(student[i].Stu); cnt = 0; } } for (int i = 0; i < num1; i++) { for (int j = 0; j < num2; j++) { printdata(student, i, j); } } } #包括 使用名称空间std; int-cnt=0; 结构数{ int x; int-y; }; 结构名{ char Stu[30]={0}; num*数字; }; int输入(int&a){ 如果(cnt==0){ cout>a; cnt++; 返回a; } 如果(cnt==1){ cout>a; cnt++; } } 无效输入(字符*pt){ 如果(cnt==2){ cout>pt; cnt++; } } intinputnum(inti){ cout>i; 返回i; } 无效打印数据(名称*pSt、int i、int j){ cout

如何在C++;? 目前我正在C++中对结构中的结构进行动态分配。所以,我制作了一个我认为可以动态分配的代码。 以下是我编写的代码: #include<iostream> using namespace std; int cnt = 0; struct num{ int x; int y; }; struct name { char Stu[30] = { 0 }; num *number; }; int input(int& a) { if (cnt == 0) { cout << "입력할 수 : "; cin >> a; cnt++; return a; } if (cnt == 1) { cout << "입력할 수 : "; cin >> a; cnt++; } } void input(char *pt) { if (cnt == 2) { cout << "입력할 글자 : "; cin >> pt; cnt++; } } int inputnum(int i) { cout << "할당할 숫자를 쓰시오 : "; cin >> i; return i; } void printdata(name *pSt, int i, int j) { cout << pSt[i].number[j].x << endl; cout << pSt[i].number[j].y << endl; cout << pSt[i].Stu << endl; } int main() { int num1 = 0; int num2 = 0; num1 = inputnum(num1); num2 = inputnum(num2); name* student = new name[num1]; for (int i = 0; i < num1; i++) { for (int j = 0; j < num2; j++) { student[i].number = new num[num2]; input(student[i].number[j].x); input(student[i].number[j].y); input(student[i].Stu); cnt = 0; } } for (int i = 0; i < num1; i++) { for (int j = 0; j < num2; j++) { printdata(student, i, j); } } } #包括 使用名称空间std; int-cnt=0; 结构数{ int x; int-y; }; 结构名{ char Stu[30]={0}; num*数字; }; int输入(int&a){ 如果(cnt==0){ cout>a; cnt++; 返回a; } 如果(cnt==1){ cout>a; cnt++; } } 无效输入(字符*pt){ 如果(cnt==2){ cout>pt; cnt++; } } intinputnum(inti){ cout>i; 返回i; } 无效打印数据(名称*pSt、int i、int j){ cout,c++,struct,dynamic,C++,Struct,Dynamic,您的代码有几个问题 首先,使用std::string而不是char[30]。其次,除非必要,否则不要分配内存。不需要num*number。使用std::vector 您可以按如下方式放置代码: struct num{ int x; int-y; }; 结构名{ std::字符串Stu; std::向量数; }; -84215041不是一个奇怪的数字。它是0xCDCDCD的十进制数。这是Microsoft调试CRT用于表示未初始化堆内存的值。请参阅 关于输入函数,为什么不编写一些更简单的函数呢

您的代码有几个问题

首先,使用
std::string
而不是
char[30]
。其次,除非必要,否则不要分配内存。不需要
num*number
。使用
std::vector

您可以按如下方式放置代码:

struct num{
int x;
int-y;
};
结构名{
std::字符串Stu;
std::向量数;
};
-84215041
不是一个奇怪的数字。它是0xCDCDCD的十进制数。这是Microsoft调试CRT用于表示未初始化堆内存的值。请参阅

关于
输入
函数,为什么不编写一些更简单的函数呢

void输入x(int&x)
{
cout>x;
}
无效输入y(整数和y)
{
cout>y;
}
无效输入(字符*pt)
{
cout>pt;
}
您可以按如下方式使用:

for(int i=0;i
输入应该使用
std::string
,但是,如果您使用我上面建议的方法:

void输入(std::string&pt)
{
cout>pt;
}
至于
name*student
,你可以用
std::vector
替换它:

std::vector学生;
对于(int i=0;i
必须向函数
int-inputnum(int-i)
提供
i
的目的是什么?为什么不在函数内部定义一个本地
i
?在执行手动动态分配时,程序会泄漏内存。读取
int-input(int&a)<代码> >如果<代码> CNT!= 0 < /COD>,这是未定义的行为。谢谢您的评论!我不知道向量容器,这就是为什么我不能做得更简单。我将更多地研究C++编程。谢谢您的建议。