gpt4 book ai didi

c++ - 在 Mac 上的 Xcode 上尝试 C++ - ERROR-exc_bad_access (code=1 address=0x100500000)

转载 作者:行者123 更新时间:2023-11-30 05:29:29 24 4
gpt4 key购买 nike

我一直在尝试编写一个程序,我必须读取一个具有大约 3000 万个长值的二进制文件,我们必须找出模式,我已经使用较少的值成功完成了它,但是当我尝试使用该文件总是给我错误- exc_bad_access (code=1 address=0x100500000),我正在我的 MAC 上的 Xcode 中尝试它并在 C++ 中实现。代码如下,谁能帮帮我?

#include <iostream>
#include<fstream>
#include<string>
#include<vector>

using namespace std;

void mode(long data[], long size, long &num_modes, long modeNums[], long &maxFrequency);

int main()
{




long *data,*modeNums, size;

ifstream binaryin("TestData.bin", ios::binary);
binaryin.read(reinterpret_cast<char *>(&size), 4);



data = new(nothrow)long[size];




if(!data)
{ cout<<"Memory allocation error for data array, program will terminate\n";
system("pause");
exit(0); }

binaryin.read(reinterpret_cast<char *>(data),size*sizeof(long));

//cout<<"SIZE "<<size<<endl;

long num_modes;long maxFrequency;
modeNums=new(nothrow)long[size];

size=3000000;

mode(data,size,num_modes,modeNums,maxFrequency);

/* for(int i=0;i<20;i++)
cout<<"data[i]"<<data[i]<<endl;*/



// cout<<"maxFrequency= "<<maxFrequency;
// cout<<"\nnum_modes= "<<num_modes<<endl;

// for(int i=0;i<num_modes;i++)
// cout<<"modeNums[]= "<<modeNums[i]<<endl;

}


void mode(long data[], long size, long &num_modes, long modeNums[], long &maxFrequency)
{
// size=300000;

// cout<<"SIZE "<<size<<endl;

int cnt=0,val=0;// long *arr,*arr1;

vector<long> arr;
vector<long> arr1;

//arr=new(nothrow)long[size/2];
//arr1=new(nothrow)long[size/2];

// cout<<"INSIDE THE FUNCTION\n";
//cout<<"SIZE "<<size<<endl;
long k;
//cout<<"SIZE "<<size<<endl;

cout<<"\nstarting for loop\n";

for(int i=0;i<size;i++)
{ cout<<"Inside for loop\n";
cnt=0; k=(size-1);

long num=data[i];

int flag=0;

int temp=val;

while(temp!=0)
{ cout<<"inside while loop\n";
if(arr[temp]==num)
{ flag=1;}
temp--;
}

if(flag==0){
int count=0;
for(int j=0;j<(size/2);j++)
{// cout<<"Inside for which is inside while\n";
cout<<"data[j] "<<data[j]<<" "<<"data[k] "<<data[k]<<endl;
cout<<"COUNT "<<count++<<endl;
if(num==data[j] && num==data[k])
{ cnt+=2; }

else if(num==data[j]||num==data[k])
{ cnt++; }
k--;
}
arr.push_back(num);arr1.push_back(cnt);
val++;
}
else
flag=2;
}

cout<<"\nend of for loop\n";
// for(int i=0;i<val;i++)
// cout<<"NUM "<<arr[val]<<"Mode "<<arr1[val]<<endl;

maxFrequency=0;
for(int i=0;i<val;i++)
{
if(arr1[i]>maxFrequency)
maxFrequency=arr1[i];
}

num_modes=0; int value=0;
for(int i=0;i<val;i++)
{
if(arr1[i]==maxFrequency)
{ num_modes++;
modeNums[value]=arr[i];
value++; }
}

/* int value=0;
for(int i=0;i<val;i++)
{
if(maxFrequency==arr1[i])
{ modeNums[value]=arr[i];
value++;}
} */

// for(int i=0;i<val;i++)
// cout<<"Value "<<arr[i]<<" Mode "<<arr1[i]<<endl;

// cout<<"maxFrequency= "<<maxFrequency<<endl;
// cout<<"\nnum_modes= "<<num_modes<<endl;
cout<<"\nend of function\n";

}

enter image description here

最佳答案

这一行:

size=3000000;

意味着您分配一定大小的数组(无论您从文件中读取什么),然后告诉您的 mode 函数这些数组实际上是 3000000 长整型。这可能会导致缓冲区溢出。

我看不出有任何理由将这条线放在那里。

此外,如果您使用 new(nothrow),您应该检查返回值。

关于c++ - 在 Mac 上的 Xcode 上尝试 C++ - ERROR-exc_bad_access (code=1 address=0x100500000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36365273/

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