gpt4 book ai didi

C++程序内存不足

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

首先,我真的很抱歉,但我不知道我的程序哪里有错误,我已经经历了一百次,但我就是找不到它。
当我在 VB2010 中调试时出现访问验证错误,因此必须有一个函数从不允许的地方获取内存。程序是从数据库中获取一些数据,对其进行排序并将其返回到 output.txt。
它是拉丁语-克罗地亚语词典。无论如何,请帮忙。

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <string>
#include<stdlib.h>
using namespace std;
void ascii_convert(int);
void string_compare(string);
void word_sort(int a,string inp);
string word1=0;
string word2=0;
string word3=0;
string upis;
string word[30] = {};
int match=0;
int input=0;
int broj_rijeci = 0;

int main()
{
string line;
ifstream myfile ("database.txt"); //loading database.txt
int count = 0;
if (myfile.is_open()){
while ( getline (myfile,line) ){
if(line.at(0) == '['){ //get's the number of words in database..
int i = line.length()-1; //...that is the first line of databse
int brojac = 0;
while(line.at(i) != line.at(0)){
input = line.at(i);
ascii_convert(input);
broj_rijeci = broj_rijeci + input*static_cast<int>(pow(static_cast<double>(10),brojac));
i--;
brojac++;
}
}
if(line.at(0) != '['){
for(int i = 0; line.at(i)!=' ' ;i++){
word[count] = word[count] + line.at(i);
}
count++;
}
}
myfile.close();
}
else cout << "Unable to open file";

for(int i = 0; i<broj_rijeci ;i++) cout<<word[i]<<endl;
cin>>upis;
string_compare(upis); //after this line I will put the output as output.txt
system("pause");
return 0;
}

void string_compare(string){
int len1 = upis.length();
int len;
for(int i = 0; i < broj_rijeci; i++){
int len2 = word[i].length();
if (len1<len2) len = len1;
else len = len2;
for(int y = 0; y < len; y++){
if(upis.at(y) == word[i].at(y)) match++;
}
word_sort(match,word[i]);
}
}
void word_sort(int a,string inp){
int match1 = 0;
int len1 = upis.length();
int len;
for(int i = 0; i < broj_rijeci; i++){
int len2 = word1.length();
if (len1<len2) len = len1;
else len = len2;
for(int y = 0; y < len; y++){
if(upis.at(y) == word1.at(y)) match1++;
}
}
if(a>match1){
word3 = word2;
word2 = word1;
word1 = inp;
}else{
int match1 = 0;
int len1 = upis.length();
int len;
for(int i = 0; i < broj_rijeci; i++){
int len2 = word2.length();
if (len1<len2) len = len1;
else len = len2;
for(int y = 0; y < len; y++){
if(upis.at(y) == word2.at(y)) match1++;
}
}
if(a>match1){
word3 = word2;
word2 = inp;
}else{
int match1 = 0;
int len1 = upis.length();
int len;
for(int i = 0; i < broj_rijeci; i++){
int len2 = word3.length();
if (len1<len2) len = len1;
else len = len2;
for(int y = 0; y < len; y++){
if(upis.at(y) == word3.at(y)) match1++;
}
}
if(a>match1) word3 = inp;
}
}
}

void ascii_convert(int){ //function for converting variable "input"
if(input == 48){ //from ascii to decimal numbers
input = 0;
}
if(input == 49){
input = 1;
}
if(input == 50){
input = 2;
}
if(input == 51){
input = 3;
}
if(input == 52){
input = 4;
}
if(input == 53){
input = 5;
}
if(input == 54){
input = 6;
}
if(input == 55){
input = 7;
}
if(input == 56){
input = 8;
}
if(input == 57){
input = 9;
}
}

这是我的“database.txt”:

[4]
terra ae f zemlja
amica ae f prijateljica
puela ae f djevojcica
nauta ae m mornar

谢谢支持

最佳答案

首先,所有这些都必须修复

string word1=0;
string word2=0;
string word3=0;

这些正在初始化string对象到被解释为转换的 NULL 指针。不好。坦率地说,我很震惊你的程序甚至在 main() 之前就完成了全局变量的初始化。 ,因为它肯定不在我的工具链上。

接下来,这是使用一个索引 far 超出其数组声明大小的:

for(int i = 0; i<broj_rijeci ;i++) cout<<word[i]<<endl;

使用给定的输入文件并利用您的加载算法,broj_rijeci计算为133,只有94个条目比word[]的大小长.简而言之,您对该变量的计算完全错误,或者数组的大小方式不足。无论哪种方式,它的未定义的行为。我倾向于前者(加载算法错误)。但是,如果没有关于每一行中每个实体的目的的精确信息,我在这方面就无法提供更多的输入。

除此之外,这里充斥着编程不稳定和不良做法。函数传递参数只是为了修改传递参数的全局只是冰山一角。

克罗地亚语-英语备忘单

对于想要扩展该算法(或至少尝试理解它正在尝试做的事情)的感兴趣方:

  • brojač = 柜台
  • broj = 数量或大小
  • riječi = 单词
  • ae = 发电机

关于C++程序内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202090/

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