尝试写入文件时发生总线错误 我试图用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中的帮助。谢谢,这项工作,