我正在尝试使用2D数组生成C ++中所有的矩阵,但是当我尝试写入超过735个字符时我有一个BUS ERROR,我想我的内存分配有问题,你能帮我吗? ?
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
#define symbols 800
int main ()
{
fstream file("/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt",ios::out);
int *ptr;
ptr =(int*)calloc(symbols, sizeof(symbols));
int i,j,array[1][symbols];
for (i=0; i<1; i++)
{
for (j=0; j<symbols; j++)
array[1][symbols]=1;
}
cout << "Array indicates:\n";
for (i=0; i<1; i++) {
for (j=0; j<symbols; j++)
file<<array[1][symbols];
file.close();
cout << "\n";
}
答案 0 :(得分:3)
可能还有其他错误,但对于初学者来说,你是
使用array[1]
(第二个元素),array
只有int[symbols]
一个元素(calloc
类型)。未定义的行为,以及
既然你在写作,你肯定会腐蚀其他物品
在堆栈上。
sizeof
看起来也有点奇怪;是的
我第一次看到用int
指定的元素大小
一个常数。在这种情况下,常量具有类型int*
,和
你分配给std::vector<int>
,所以你可能已经幸运了。
但{{1}}似乎更合适。
当然,您在第一次写入后关闭文件, 这意味着所有后来的写入都将是无操作。
答案 1 :(得分:1)
在循环中,您通过用于声明它的常量访问数组:
array[1][symbols]
您应该使用循环变量:
array[i][j]
答案 2 :(得分:1)
谢谢大家的帮助,这真的很有帮助,在这里我发布了我减少它的最终代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstring>
using namespace std;
#define symbols 1000000
//#define SNR 7
int main ()
{
fstream file("/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt",ios::out);
int channel[1][symbols];
memset((void*)channel, '\0', symbols);
for (int i=0; i<1; i++)
for (int j=0; j<symbols; j++) {
channel[i][j]=1;
}
for (int i=0; i<1; i++) {
cout << endl;
for (int j=0; j<symbols; j++)
//cout << channel[i][j];
file<<channel[i][j];
}
}
答案 3 :(得分:0)
ptr =(int*)calloc(symbols, sizeof(symbols));
应该是
ptr =(int*)calloc(symbols, sizeof(int));
我不确定这会直接导致您的问题。
答案 4 :(得分:0)
您的程序中存在许多逻辑错误,但我认为导致崩溃的问题是您正在关闭嵌套循环中的文件,然后尝试写入它。
答案 5 :(得分:0)
如果你只想在文件中写一堆'1',为什么不能这样:
std::ofstream file("whatever path");
std::fill_n(std::ostream_iterator<int>(file), how_many, 1);
编辑:要先将数据放入向量中,然后复制到文件中,您可以执行以下操作:
std::vector<int> data;
std::fill_n(std::back_inserter(data), how_many, 1);
并将其复制到文件中,您可以执行以下操作:
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));