2017-12-13 23 views
1

구조체의 2D 배열을 만들고 값을 인쇄하려고합니다. 어떻게 메시지를 ""Segmentaion 오류 (코어 덤프) ".C++에서 동적으로 할당 된 2D 배열 구조를 만드는 방법은 무엇입니까?

#include <iostream> 
#include <string> 
using namespace std; 

struct student{ 
    string name; 
    int age; 
    float marks; 
}; 
student* initiateStudent(string name, int age, float marks){ 
    student *studFun; 
    studFun->name = name; 
    studFun->age = age; 
    studFun->marks = marks; 
    return studFun; 

} 
int main() { 
    int totalStudents = 1; 
    string name; 
    int age; 
    float marks; 
    cin >> totalStudents; 
    student** stud = new student*[totalStudents]; 
    for(int i=0;i<totalStudents;i++){ 
     stud[i] = new student[1]; 
     cin >> name >> age >> marks; 
     stud[i] = initiateStudent(name,age,marks); 
    } 

    delete [] stud; 
    return 0; 
} 

나 C++에 대한 넷빈즈를 사용하여 컴파일하고 있습니다. 사람이 코드를 사용하여 무슨 잘못 말해 줄래?

+0

'initiateStudent'는 초기화되지 않은 변수'studFun'을 가지고있어서 여러분이 간접적으로 쓰고 있습니다. 충돌이 일어나는 경향이 있습니다. 적절한 경고를주고 최대 레벨로 켜는 컴파일러를 찾습니다. –

+0

initiateStudent 함수의 끝 –

+0

@ ZalmanStern 코드를 수정해야하는 이유는 무엇입니까? – Spandy

답변

1

이 작동합니다

#include <iostream> 
#include <string> 
using namespace std; 

struct student{ 
    string name; 
    int age; 
    float marks; 
}; 
student* initiateStudent(string name, int age, float marks){ 
    student *studFun = new student(); 
    studFun->name = name; 
    studFun->age = age; 
    studFun->marks = marks; 
    return studFun; 
} 
int main() { 
    int totalStudents = 1; 
    string name; 
    int age; 
    float marks; 
    cin >> totalStudents; 
    student** stud = new student*[totalStudents]; 
    for(int i=0;i<totalStudents;i++){ 
     stud[i] = new student[1]; 
     cin >> name; 
     cin >> age; 
     cin >> marks; 
     stud[i] = initiateStudent(name,age,marks); 
    } 

    delete [] stud; 
    return 0; 
} 
+0

그냥 student * studFun = new student() 인 방법이 궁금합니다. student * studFun과 다른; – Spandy

+0

코드가'for' 루프에서 메모리 누수를 만듭니다. – PaulMcKenzie

+1

student * studFun 1 "studFun"구조에 대한 초기화되지 않은 포인터 인 "test"는 일부 가비지를 처리 ​​할 수 ​​있습니다. 2 변수 자체가 모두이기 때문에 "studFun"에 대한 컴파일러에서 메모리 공간을 방출해야합니다. 3이 메모리 위치의 내용은 무작위로 간주되어야합니다. 4 컴파일러는 초기화되지 않은 데이터에 관해서는 물론 원하는 것을 자유롭게 할 수 있습니다. 4.2 "studFun"이 선언되었지만 결코 사용되지 않으면 최적화 컴파일러는 "studFun"에 대한 메모리 공간을 생성하지 않을 수도 있습니다. 위의 내용이 도움이되기를 바랍니다. –