如何在此代码中修复“访问冲突读取位置”

先生先生

运行此代码,我遇到了这样的错误

'在Project1.exe中的0x778D7FCB(ntdll.dll)处引发了异常:0xC0000005:访问冲突读取位置0x00000014。

此行中发生此错误

~UnivStudnet() {
delete[]major; // error
    }
#include <iostream>
#include <cstring>
using namespace std;

class Person {
private:
    char * name;
public:
    Person(const char * myname) {
        name = new char[strlen(myname) + 1];
        strcpy_s(name, strlen(name), myname);
    }
    ~Person() {
        delete[]name;
    }

    void WhatYourName() const {
        cout << "My name is " << name << endl;
    }
};

class UnivStudnet : public Person {
private:
    char * major;
public:
    UnivStudnet(const char * myname, const char * const mymajor) :Person(myname) {
        major = new char[strlen(mymajor) + 1];
        strcpy_s(major, strlen(major), mymajor);
    }
    ~UnivStudnet() {
        delete[]major;
    }

    void WhoAreYou() const {
        WhatYourName();
        cout << "My major is " << major << endl;
    }
};

int main(void) {

    UnivStudnet st1("kim", "Mathenatics");
    st1.WhoAreYou();
    UnivStudnet st2("hong", "Physiscs");
    st2.WhoAreYou();
    return 0;
}

如何解决此错误?

塞尔比

您的strcpy_s使用情况值得怀疑。

    major = new char[strlen(mymajor) + 1];
    strcpy_s(major, strlen(major), mymajor);

第二个参数tostrcpy_s是第一个参数指定的缓冲区的分配大小。(我刚刚意识到-基于另一个strlen(major)未定义的答案,然后再复制到该答案

您正在分配足够大的缓冲区来容纳字符串,但是随后对strcpy_s的调用表明它major不够大,无法容纳包括null char在内的整个字符串。

更好:

    size_t len = strlen(mymajor) + 1;
    major = new char[len];
    strcpy_s(major, len, mymajor);

对基类name参数也重复上述模式

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何修复CoCreateInstance读取访问冲突?

如何解决OpenCV中的“访问冲突读取位置”错误?

如何在此程序中修复RuntimeError?

如何在此React组件中修复“无法分配为仅读取对象的属性'样式'”?

访问冲突读取位置fprintf

例外:“访问冲突读取位置”

如何让我的队列在 C++ 中工作?未处理的异常:访问冲突读取位置

RegQueryValueExW 在 C 中返回访问冲突读取位置异常

类的析构函数中的访问冲突读取位置

多线程函数中的访问冲突读取位置错误

如何在此代码中获取文本

如何在此代码中禁用纹理?

如何在此代码中限制UIalertview?

如何在此代码中实现OnItemClickListener?

(this :: methodName)如何在此代码中工作?

如何在此代码中替换元音?

如何在此代码中解决ArrayIndexOutOfBoundsException?

如何在此代码中插入链接

如何在此代码中调用函数?

递归如何在此代码中工作?

如何在此代码中访问我的状态变量?

如何修复 <程序名称> 中 <内存位置> 处的“未处理异常”。访问冲突写入位置 <内存位置>。' 在视觉工作室 2017

如何在此函数中修复零错误的浮点除法?

如何在我的代码中修复“无法读取 null 的 addEventListener 的属性”?

CreateBuffer抛出“访问冲突读取位置”

使用Botan访问冲突读取位置

C ++ CImg访问冲突读取位置

vc++访问冲突读取位置

使用Cudd的访问冲突读取位置