首页 > 试题广场 >

在32位系统中,关于下面程序说法正确的是( &nbs...

[不定项选择题]
在32位系统中,关于下面程序说法正确的是()
class Item {
private:
    char *desc;
    int storage;
public:
    Item(){
        desc = new char[51];
    }

    void setInfo(char *dsrc, int num) {
        strcpy(desc,dsrc);    
        storage = num;
    }
};

int main() {
    Item stock;    
    stock.setInfo("pen",20);
    return 0;
}
  • main函数定义了一个stock对象占8个字节
  • storage和desc成员各占4个字节
  • 存在内存泄漏的问题
  • 存在编译错误

内存溢出,申请不到足够的内存;

内存泄露,无法释放已申请的内存;

两者关系:内存泄露 → 剩余内存不足 → 后续申请不到足够内存 →内存溢出。

发表于 2021-02-18 21:22:26 回复(0)
<p>对象中动态数组所占内存不算在这个对象所占内存中。对象所占空间编译时就已知,而动态数组是运行时才分配大小。</p>
发表于 2020-04-22 15:50:07 回复(0)
A,B 指针类型大小就是机器地址空间也就是 32/8=4字节,int类型占4字节,所以共8字节 C 在成员函数中new出来的地址空间,要在自定义析构函数去delete
发表于 2019-11-23 10:46:05 回复(0)

成员函数可以看作是类作用域的全局函数,不在对象分配的空间里


对象调用成员函数时,编译器可以确定这些全局函数的地址,通过传入this指针 和 其他参数完成函数的调用,所以类中没有必要存储成员函数的信息


编辑于 2020-03-03 13:27:19 回复(0)

New了字节在析构函数中要delete

发表于 2020-01-29 19:20:12 回复(0)
这里的存在内存泄露问题应该是strcpy()函数带来的。
发表于 2021-05-10 16:45:34 回复(1)
B 哪里有错?
发表于 2019-08-30 10:39:13 回复(8)
sizeof(对象)得值在编译期就确定了,题目里面的申请在堆上,不占用对象的内存大小
编辑于 2024-03-06 21:16:56 回复(0)
new分配的数组没有得到释放,因此存在内存泄漏
发表于 2022-09-23 09:42:37 回复(0)
C.存在内存泄漏的问题
应该是Item类没有定义析构函数来释放 desc 指向的堆内存

发表于 2022-09-13 20:41:31 回复(0)
类的空间由类的非静态成员变量之和来决定 该题中desc为一个指针 ,storage为一个整形变量因此占据8个字节。
发表于 2022-02-24 00:48:24 回复(1)
关于内存泄漏,有两个疑问
第一,Item stock;创建的对象到底是在栈上还是在堆上?
发表于 2020-12-21 23:53:12 回复(1)
调用成员函数时传入的参数“pen”是常量字符串,成员函数没const,编译不通过
发表于 2020-07-09 22:42:23 回复(1)
应该是ABC
发表于 2019-10-25 03:12:52 回复(0)
stock对象不止8个字节吧,创建stock调用构造函数后不是8+51*1=59,再字节对齐不是60字节么。
发表于 2019-10-14 22:10:47 回复(4)