gpt4 book ai didi

c++ - 在 C++ 中使用 cin 时内存损坏

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:29 25 4
gpt4 key购买 nike

我有类“student.cpp”

#include <iostream>
#include "student.h"
using namespace std;


void student::setMarks(int m1, int m2) {
mark1 = m1;
mark2 = m2;
};
void student::setName(char *n) {
name = n;
};
int student::calc_media(void){
return (mark1+mark2)/2;
};
void student::disp(void){
cout << "Student:" << name << " \n media:"<< calc_media() <<"\n";
};

student::student(){
mark1 = 0;
mark2 =0;
name = "";
};

头文件“student.h”:

ifndef CLASY_STUDENT_H
#define CLASY_STUDENT_H

#endif //CLASY_STUDENT_H

class student{

char *name;
int mark1, mark2;

public:
void setName(char *n);
void setMarks(int m1, int m2);
void disp(void);
int calc_media(void);
student();
};

和“main.cpp”:

#include <iostream>
#include "student.h"

using namespace std;

int main() {
student s;
char* n;
int m1, m2;

cout << "Enter name:";
cin>> n;
cout << "Enter marks of two subjects:";
cin>> m1;
cin>> m2;

s.setName(n);
s.setMarks(m1, m2);

s.disp();
return 0;
}

我正在运行这个 usign Clion 和 Cmake 是:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")

set(SOURCE_FILES main.cpp student.cpp student.h student.cpp student.h)

但是当我运行时,它要求输入名称,但是当我键入内容时,我遇到了内存碎片错误。怎么了?顺便说一句,有人能告诉我它对 C++ 来说是否合适吗?我正在尝试从 Java 切换到 C++。

最佳答案

char* n;
...
cin>> n;

n是一个指针,应该指向一 block 特定的内存。但是你从来没有设置它。所以它有一些未定义的值,指向你最终试图覆盖的一些内存中谁知道的地方。很可能是您不允许覆盖的内存,导致段错误。

不要尝试使用 char*如果您还不知道手动内存管理(一旦了解,您就会明白为什么不了解)。使用 std::string .

快速浏览一下,您几乎可以替换 char*到处都是std::string (只要你 #include <string> )。

关于c++ - 在 C++ 中使用 cin 时内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35725436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com