-3

行列乗算用の簡単な C++ コードを作成しました。コードは glib c エラーを出しています。2 つの行列を乗算する単純な行列乗算コードです。

#include <iostream>
 using std::cerr;
 using std::cout;
 using std::endl;
#include<stdio.h>
#include <string.h>
 using std::string;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include<stdlib.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include <vector>
using namespace std;

int main()
{ 
int i,j,k;
vector<int> mult;
vector<float> dist_shell;
std::string skip;
std::string empty_line;
std::string num_elements[3];
int cluster_num;
vector<int> inter_type; //Interaction type (2-2body;3-3body etc.)
int c_mult;
float c_dist_shell;
int c_inter_type; // c stands for cin type variables frm reading file 
float unit_cell[3][3];
float factor;
int l,m,n;
float sum;

ifstream poscar("POSCAR");


float unit_cell[3][3];

    int total_atom=32;
    float frac[total_atom][3];
    float real_pos[total_atom][3];
    for (int count=0;count<total_atom;count++)
        {
    poscar>>frac[count][1]>>frac[count][2]>>frac[count][3]>>true_false[count][1]>>true_false[count][2]>>true_false[count][3];
                }     
        for (l=0;l<total_atom;l++)
                {
                for (m=0;m<3;m++)
                    {
                        sum=0;
                    for (n=0;n<3;n++)
                        {
                            sum+=frac[l][n]*unit_cell[n][m];
                        }
                    real_pos[l][m]=sum;
                    }
                }

return 0;
}

私のエラーは次のとおりです。

*** glibc detected *** ./a.out: free(): invalid pointer: 0x00002aaaaadb8b88 ***
======= Backtrace: =========
/lib64/libc.so.6[0x2aaaab0b676e]
/lib64/libc.so.6(__libc_free+0x6c)[0x2aaaab0b7ebc]
/usr/intel/pkgs/gcc/4.2.2/lib64/libstdc++.so.6(_ZNSs7reserveEm+0x9e)[0x2aaaaac657fe]
/usr/intel/pkgs/gcc/4.2.2/lib64/libstdc++.so.6(_ZNSs6appendEPKcm+0x66)[0x2aaaaac659c6]
/usr/intel/pkgs/gcc/4.2.2/lib64/libstdc++.so.6(_ZStrsIcSt11char_traitsIcESaIcEERSt13basic_ist
reamIT_T0_ES7_RSbIS4_S5_T1_E+0x1a9)[0x2aaaaac3fdb9]
./a.out[0x4022ec]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x2aaaab068304]
./a.out(__gxx_personality_v0+0x69)[0x401019]
======= Memory map: ========
00400000-00405000 r-xp 00000000 00:109 14247450                          /nfs/site/disks/summ
er11/counting/counting_main/a.out
00505000-00506000 rw-p 00005000 00:109 14247450                          /nfs/site/disks/summ
er11/counting/counting_main/a.out
00506000-00527000 rw-p 00506000 00:00 0                                  [heap]
2aaaaaaab000-2aaaaaac6000 r-xp 00000000 68:02 80782                      /lib64/ld-2.4.so
2aaaaaac6000-2aaaaaac7000 r-xp 2aaaaaac6000 00:00 0 
2aaaaaac7000-2aaaaaac9000 rw-p 2aaaaaac7000 00:00 0 
2aaaaabc6000-2aaaaabc8000 rw-p 0001b000 68:02 80782                      /lib64/ld-2.4.so
2aaaaabc8000-2aaaaacb0000 r-xp 00000000 00:18 2295681                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libstdc++.so.6.0.9
2aaaaacb0000-2aaaaadaf000 ---p 000e8000 00:18 2295681                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libstdc++.so.6.0.9
2aaaaadaf000-2aaaaadb6000 r--p 000e7000 00:18 2295681                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libstdc++.so.6.0.9
2aaaaadb6000-2aaaaadb8000 rw-p 000ee000 00:18 2295681                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libstdc++.so.6.0.9
2aaaaadb8000-2aaaaadcd000 rw-p 2aaaaadb8000 00:00 0 
2aaaaade8000-2aaaaae3c000 r-xp 00000000 68:02 80502                      /lib64/libm-2.4.so
2aaaaae3c000-2aaaaaf3b000 ---p 00054000 68:02 80502                      /lib64/libm-2.4.so
2aaaaaf3b000-2aaaaaf3d000 rw-p 00053000 68:02 80502                      /lib64/libm-2.4.so
2aaaaaf3d000-2aaaaaf3e000 rw-p 2aaaaaf3d000 00:00 0 
2aaaaaf3e000-2aaaaaf4b000 r-xp 00000000 00:18 1094438                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libgcc_s.so.1
2aaaaaf4b000-2aaaab04a000 ---p 0000d000 00:18 1094438                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libgcc_s.so.1
2aaaab04a000-2aaaab04b000 rw-p 0000c000 00:18 1094438                    /nfs/sc/itools/em64t
_SLES10/pkgs/gcc/4.2.2/lib64/libgcc_s.so.1
2aaaab04b000-2aaaab182000 r-xp 00000000 68:02 80494                      /lib64/libc-2.4.so
2aaaab182000-2aaaab282000 ---p 00137000 68:02 80494                      /lib64/libc-2.4.so
2aaaab282000-2aaaab285000 r--p 00137000 68:02 80494                      /lib64/libc-2.4.so
2aaaab285000-2aaaab287000 rw-p 0013a000 68:02 80494                      /lib64/libc-2.4.so
2aaaab287000-2aaaab28e000 rw-p 2Abort

コードの別の部分にエラーがあるかどうかを調べようとしています。データ型の変更も役に立ちませんでした。エラーを見つけるのを手伝ってくれるすべての人に感謝します。ありがとう。

4

1 に答える 1

0

解決策は、ファイルからいくつかの行を読み取るときに、getline が次の行ではなく行の終わりを読み取ることがあるというものでした。そのため、行スキップ部分に正確に何が含まれているかを確認することが重要です。それが最終的にこのエラーにつながりました。エラーはこのコードの一部ではありませんでした。

于 2012-11-05T23:43:40.683 に答える