【发布时间】:2012-07-03 04:49:25
【问题描述】:
学生.h
class Student
{
private:
char m_sHouse[64];
public:
Student(void);
~Student(void);
void getHouse(char *hName);
void setHouse(char *hName);
}
学生.cpp
void Student::setHouse(char *hName)
{
strcpy(m_sHouse, hName);
}
void Student::getHouse(char *hName)
{
if (m_sHouse != NULL)
{
hName = new char[strlen(m_sHouse)+1];
strcpy(hName, m_sHouse);
}
}
主要:
student.getHouse(house);
if (strcmp(house, "house") == 0)
cout <<"\tCorrectly returned the student house: " << house<< endl;
setHouse(char *hName) 设置 student->m_sHouse 等于“房子”。
我的问题:
当在getHouse(char *hName) 中时,它会正常运行,将hName 设置为“house”。但是当控制权传递给函数时,我的动态分配的内存被释放,所以当我在 main 中使用 strcmp 时,我的程序崩溃(我最终比较了一个 NULL 指针)。
【问题讨论】:
-
1.它没有被释放。 2. 不要这样做。
-
给出的答案将解决这个问题,但我可以问你为什么需要这样做?在 C++ 中使用
strcpy通常是不受欢迎的,因为你混合了不同的风格。您是否尝试过与std:strings 合作? -
虽然了解代码崩溃的原因对您很重要,但最好切换到 C++ 字符串以完全避免该问题。
-
我需要这样做,因为我的老师已经老了。他知道使用字符串是可行的方法,但在他看来,我们可能不得不使用旧代码,或者老程序员卡在他们的方式中,所以他希望我们习惯使用 kernigan 和 ritchie 字符数组。
-
我看到有人在完成 Coleman 博士的任务。
标签: c++ class pointers dynamic-allocation