尝试写入文件时发生总线错误 我试图用C++数组来生成C++中所有的矩阵,但是当尝试写735个字符时,我有一个总线错误,我想我的内存分配有问题,请帮我一下好吗? #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"; } #包括 #包括 #包括 使用名称空间std; #定义符号800 int main() { fstream文件(“/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt”,ios::out); int*ptr; ptr=(int*)calloc(symbols,sizeof(symbols)); int i,j,数组[1][symbols]; 对于(i=0;i

尝试写入文件时发生总线错误 我试图用C++数组来生成C++中所有的矩阵,但是当尝试写735个字符时,我有一个总线错误,我想我的内存分配有问题,请帮我一下好吗? #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"; } #包括 #包括 #包括 使用名称空间std; #定义符号800 int main() { fstream文件(“/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt”,ios::out); int*ptr; ptr=(int*)calloc(symbols,sizeof(symbols)); int i,j,数组[1][symbols]; 对于(i=0;i,c++,bus-error,C++,Bus Error,ptr=(int*)calloc(symbols,sizeof(symbols)); 应该是 ptr=(int*)calloc(symbols,sizeof(int)); 但我不确定这是否直接导致了您的问题。ptr=(int*)calloc(symbols,sizeof(symbols)); 应该是 ptr=(int*)calloc(symbols,sizeof(int)); 但我不确定这是否直接导致了您的问题。您的程序中有许多逻辑错误,但我相信导致崩溃的问题是您正在关闭嵌套循环中的文件,然后试

ptr=(int*)calloc(symbols,sizeof(symbols));

应该是
ptr=(int*)calloc(symbols,sizeof(int));

但我不确定这是否直接导致了您的问题。

ptr=(int*)calloc(symbols,sizeof(symbols));

应该是
ptr=(int*)calloc(symbols,sizeof(int));


但我不确定这是否直接导致了您的问题。

您的程序中有许多逻辑错误,但我相信导致崩溃的问题是您正在关闭嵌套循环中的文件,然后试图写入该文件。

您的程序中有许多逻辑错误,但我相信是导致崩溃的问题e崩溃是指您关闭嵌套循环中的文件,然后尝试写入该文件。

在循环中,您通过用于声明该数组的常量访问该数组:

array[1][symbols]
您应该使用循环变量:

array[i][j]

在循环中,通过用于声明数组的常量访问数组:

array[1][symbols]
您应该使用循环变量:

array[i][j]

可能还有其他错误,但首先,您是 使用
array[1]
(第二个元素),当
array
只有 一个元素(属于
int[symbols]
type)。未定义的行为,以及 因为你在写作,你肯定在腐蚀其他物体 在堆栈上

calloc
看起来也有点奇怪;它是 我第一次看到用
sizeof
常量。在这种情况下,常量的类型为
int
,并且 您正在分配一个
int*
,因此您可能会幸运。 但是
std::vector
似乎更合适

当然,在第一次写入后,您将关闭文件,
这意味着以后所有的写操作都将是无操作的。

可能还有其他错误,但对于初学者来说,您是 使用
array[1]
(第二个元素),当
array
只有 一个元素(属于
int[symbols]
type)。未定义的行为,以及 因为你在写作,你肯定在腐蚀其他物体 在堆栈上

calloc
看起来也有点奇怪;它是 我第一次看到用
sizeof
常量。在这种情况下,常量的类型为
int
,并且 您正在分配一个
int*
,因此您可能会幸运。 但是
std::vector
似乎更合适

当然,在第一次写入后,您将关闭文件,
这意味着以后的所有写入操作都将是无效的。

如果您只想将一组“1”写入一个文件,为什么不执行以下操作:

std::ofstream file("whatever path");

std::fill_n(std::ostream_iterator<int>(file), how_many, 1);
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));
流文件的std::of(“任何路径”); std::fill_n(std::ostream_迭代器(文件),有多少个,1); 编辑:要先将数据放入向量,然后复制到文件,可以执行以下操作:

std::vector<int> data;

std::fill_n(std::back_inserter(data), how_many, 1);
std::矢量数据;
std::fill_n(std::back_inserter(数据),数量,1);
要将其复制到文件中,您可以执行以下操作:

std::ofstream file("whatever path");

std::fill_n(std::ostream_iterator<int>(file), how_many, 1);
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));
std::copy(data.begin()、data.end()、std::ostream_迭代器(文件));

如果您只想将一堆“1”写入一个文件,为什么不编写类似于:

std::ofstream file("whatever path");

std::fill_n(std::ostream_iterator<int>(file), how_many, 1);
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));
流文件的std::of(“任何路径”); std::fill_n(std::ostream_迭代器(文件),有多少个,1); 编辑:要先将数据放入向量,然后复制到文件,可以执行以下操作:

std::vector<int> data;

std::fill_n(std::back_inserter(data), how_many, 1);
std::矢量数据;
std::fill_n(std::back_inserter(数据),数量,1);
要将其复制到文件中,您可以执行以下操作:

std::ofstream file("whatever path");

std::fill_n(std::ostream_iterator<int>(file), how_many, 1);
std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));
std::copy(data.begin()、data.end()、std::ostream_迭代器(文件));

谢谢大家的帮助,这真的很有帮助,我在这里发布了我缩减的最终代码:

#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];
        }
    }
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义符号1000000
//#定义信噪比7
int main()
{
fstream文件(“/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt”,ios::out);
国际频道[1][符号];
memset((void*)通道,'\0',符号);

对于(int i=0;i感谢大家的帮助,这真的很有帮助,在这里我发布了我简化的最终代码:

#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];
        }
    }
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义符号1000000
//#定义信噪比7
int main()
{
fstream文件(“/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt”,ios::out);
国际频道[1][符号];
memset((void*)通道,'\0',符号);

对于(int i=0),这是一个C和C++的不神圣混合。好的C++看起来不同。这是一个C和C++的不相容混合。好的C++看起来不同。但是,既然它被定义为<代码> [1 ] < /代码>,你可以使用的唯一的下标是<代码> 0 < /C> >,而不是<代码> 1 > /代码>。幸运的是,循环<代码> > <代码>可以。(i=0;iRight——但我认为你把它归因于运气是完全正确的。但也要注意,因为它被定义为
[1]
,所以你可以使用的唯一下标是
0
,而不是
1
。同意。幸运的是
i
上的循环没有问题(
(i=0;iRight——但我认为你将其归因于运气是完全正确的。谢谢,这项工作,但是我想生成1000000个,并将其放入向量中,因为稍后我将在不同的处理中使用此向量,感谢你在advanced中的帮助。谢谢,这项工作,