gpt4 book ai didi

c++ - 访问冲突指针错误

转载 作者:行者123 更新时间:2023-11-28 02:11:50 25 4
gpt4 key购买 nike

我正在实现我的基本 String 类版本,但是我遇到了一个我以前从未见过并且不知道如何正确调试的问题。我的代码粘贴在下面。所有函数都有对应的头文件。我的测试只是使用转换构造函数创建一个对象。

A4String obj1("this");

我的问题是我抛出了访问冲突读取位置异常。我的研究表明我可能正在尝试访问 Visual Studio 分配之外的内存。不过,我无法找到此指针错误存在的位置。我在 convert 构造函数的每个步骤和随后的函数调用中都放置了断点,但是我的程序在返回到 main 之前不会抛出异常,这似乎是在我的程序完全执行之后。

#include "A4String.h"



A4String::A4String() {
data = new char[5];
data[0] = '\0';
capacity = 5;

}

A4String::~A4String() {
if (capacity != 0)
delete[] data;

}
//Copy Constructor
A4String::A4String(const A4String &right) {
cout << "copy" << endl;

data = new char[right.capacity + 1];
strcpy(data, right.data, capacity);
capacity = right.capacity;

}
//Convert Constructor
A4String::A4String(const char *sptr) {
cout << "convert" << endl;
capacity = (strlen(sptr)) + 1;
data = new char[capacity + 1];
strcpy(sptr, data, capacity);

}
//Assignment
A4String& A4String::operator = (const A4String & right) {
//if (capacity != 0) delete[] data;
data = new char[right.capacity + 1];
strcpy(data, right.data, capacity);
capacity = right.capacity;
return *this;
}
//Equivalence
bool A4String::operator == (const A4String &right) const {
return (strcmp(data, right.data)) == 0;

}

int A4String::length() const {
return capacity;
}

void A4String::addChar(char) {
//Not implemented yet
}

string A4String::toString() {
string str = "";
int i = 0;
while (data[i] != '\0') {
str += data[i];
i++;
}
return str;
}

void A4String::strcpy(const char *source, char* destination, int size)
{
for (int i = 0; i < 20; i++)
destination[i] = '\0';
int index = 0;
while (source[index] != '\0')
{
destination[index] = source[index];
index++;
}
destination[index] = '\0';


}

int A4String::strcmp(char *str1, char *str2)
{

if (*str1 < *str2)
return -1;

if (*str1 > *str2)
return 1;

if (*str1 == '\0')
return 0;

return strcmp(str1 + 1, str2 + 1);

return 0;
}

int A4String::strlen( char *s)
{
char *start;
start = s;
while (*s != 0)
{
++s;
}
return s - start;
}

最佳答案

问题是你的A4String::strcpy,行

for (int i = 0; i < 20; i++)
destination[i] = '\0';

目的地少于 20 个字符,因此崩溃。

关于c++ - 访问冲突指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35402789/

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