2013-10-14 40 views
0

当我执行下面的函数时,出现这个错误,我不知道它是什么意思。下面是函数:glibc检测到空闲()无效大小(快)错误?

void readf2() 
{ 
    std::ifstream inFile("f2",std::ios_base::binary); 
    std::string str(2, '\0'); 
    int i = 0; 
    while(inFile.read(&str[i],2)){ 
    cout<<"Success: ["<< i << "] = "<< (int)str[i];      ; 
    cout<<"\n"; 
    i++; 
    } 
} 

的功能工作了一段时间写的各种数字控制台,然后轰它与此错误,回溯和存储器映射崩溃。这是因为我释放了一个不存在的内存地址吗?

+0

究竟是什么你想在这里做什么? – littleadv

+0

@littleadv我正在阅读包含一堆二进制数字的文件,我想输出它们以便我可以看到它是否正常工作。我必须做的是将这些数字保存到一个整数数组中,然后将其输出到一个单独的文件中。 – Andy

+0

你在期待'str'是那个数组吗? – littleadv

回答

1

您很可能会给read调用一个指向不属于您的内存的指针。

str[i]返回字符串中的偏移量,但它不能保证您有足够的内存来读取那个位置(+2)。

你大概的意思是有int秒的阵列,并使用i作为一个索引:

void readf2() 
{ 
    std::ifstream inFile("f2",std::ios_base::binary); 
    std::vector<int> str; // if you're reading int's - use int, not string 
    int i = 0; 
    int j; 
    while(inFile.read(&j,sizeof(int))){ // check what the content is here 
    str.push_back(j); 
    cout<<"Success: ["<< i << "] = "<< str[i]; 
    cout<<"\n"; 
    i++; 
    } 
} 
+0

那么我怎么去预防呢? – Andy

+0

现在我遇到了seg故障。我认为这可能是while循环。 I'llll和调整它 – Andy

+0

我猜''(int)str [我]'不是你应该在那里做什么。为什么你要将二进制读入字符串中?这一切似乎都是错的...... – littleadv

相关问题