正在Mac上的Xcode上尝试C++-ERROR-exc_bad_access(代码=1地址=0x100500000)
Trying C++ on Xcode on Mac- ERROR-exc_bad_access (code=1 address=0x100500000)
我一直在尝试编写一个程序,在这个程序中,我必须读取一个大约有3000万个长值的二进制文件,我们必须找出我使用较少值成功完成的模式,但当我尝试使用该文件时,它总是给我错误-exc_bad_access(代码=1地址=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 terminaten";
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 FUNCTIONn";
//cout<<"SIZE "<<size<<endl;
long k;
//cout<<"SIZE "<<size<<endl;
cout<<"nstarting for loopn";
for(int i=0;i<size;i++)
{ cout<<"Inside for loopn";
cnt=0; k=(size-1);
long num=data[i];
int flag=0;
int temp=val;
while(temp!=0)
{ cout<<"inside while loopn";
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 whilen";
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 loopn";
// 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 functionn";
}
在此处输入图像描述
此行:
size=3000000;
意味着分配一定大小的数组(无论从文件中读取什么),然后告诉mode
函数这些数组的大小实际上是3000000长。这可能会导致缓冲区溢出。
我看不出有什么理由让这条线在那里。
此外,如果使用new(nothrow)
,则应检查返回值。
相关文章:
- 我可以在 iOS 或 mac 应用程序中使用C++代码吗?
- 如何在Mac上调试VS code上的C++代码
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 使用 Mac 终端编译器编译 c++14 代码
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- OpenGL符号突出显示visual studio Mac代码中的错误
- 在 Mac 上从C++代码调用时"coreclr_create_delegate"不起作用
- 代码调用反向函数不会在Ubuntu 18上的G 或Clang 上编译,但神秘地在Mac OSX上使用
- 如何在Mac上从Java拨打的动态库中调试代码
- mac构建有一个未定义的符号,而linux构建并没有用于相同的代码
- VS 代码 C++ 断点在 Mac 中不起作用
- 我可以在 Mac 上使用 C++ 获得 -1 退出代码吗?
- 获得MAC地址的代码似乎会损坏内存,但仅在发布构建中而不是调试构建
- 为什么这段代码在Mac和Red Hat中的运行方式如此不同
- 为什么我不能在 mac 上使用 g++ 运行这个简单的 c++ 代码
- Opengl cpp 代码可在 Windows 和 Mac 上运行
- 正在Mac上的Xcode上尝试C++-ERROR-exc_bad_access(代码=1地址=0x100500000)
- 是否可以在Mac上将C++代码编译为.exe
- C++:在Mac OS X,Qt 5.0上运行代码(在Linux中创建)
- 在 G++ Ubuntu 中工作,但在 Visual Studio 中显示分段错误,在 Mac 中的代码块和 G++ 中