编写的下面一个C++程序,在windows下正常运行,ubuntu下编译正确,运行错误
发表于 : 2009-06-19 22:19
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;
class Matrix
{
public:
Matrix(int Row=0,int Col=0)
:row(Row),col(Col)
{
x=new double[row*col];
for(int i=row*col-1;i>=0;i--)
x=0;
}
void Set()
{
for(int i=row*col-1;i>=0;i--)
x=rand()%10;
}
Matrix transposition(const Matrix &mat)
{
row=mat.col;
col=mat.row;
for(int m=0;m<=row-1;m++)
{
for(int n=0;n<=col-1;n++)
{
x[m*col+n]=mat.x[n*row+m];
}
}
return *this;
}
friend ostream &operator<<(ostream &out,const Matrix &mat)
{
out<<mat.row<<" "<<mat.col<<endl;
for(int m=0;m<=mat.row-1;m++)
{
out<<"["<<mat.x[m*mat.col];
for(int n=1;n<=mat.col-1;n++)
out<<" "<<mat.x[m*mat.col+n];
out<<"]"<<endl;
}
return out;
}
~Matrix()
{
if(x!=NULL) delete []x;
}
private:
int row,col;
double *x;
};
int main()
{
time_t t;
srand(time(&t));
Matrix mat(4,5);
mat.Set();
cout<<mat<<endl;
Matrix mat2;
mat2=mat2.transposition(mat);
cout<<mat2<<endl;
return 0;
}
下面是运行显示的结果
4 5
[0 2 3 8 9]
[5 7 0 8 2]
[3 4 5 1 3]
[2 6 3 5 1]
*** glibc detected *** ./a: free(): invalid next size (fast): 0x091350b0 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7e23604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7e255b6]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb8006231]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb800628d]
./a[0x8048d5c]
./a[0x80489e3]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7dca775]
./a[0x8048831]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:01 9158821 /home/rob2468/桌面/a
08049000-0804a000 r--p 00001000 08:01 9158821 /home/rob2468/桌面/a
0804a000-0804b000 rw-p 00002000 08:01 9158821 /home/rob2468/桌面/a
09135000-09156000 rw-p 09135000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7db3000-b7db4000 rw-p b7db3000 00:00 0
b7db4000-b7f10000 r-xp 00000000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f10000-b7f11000 ---p 0015c000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f11000-b7f13000 r--p 0015c000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f13000-b7f14000 rw-p 0015e000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f14000-b7f17000 rw-p b7f14000 00:00 0
b7f17000-b7f24000 r-xp 00000000 08:01 368705 /lib/libgcc_s.so.1
b7f24000-b7f25000 r--p 0000c000 08:01 368705 /lib/libgcc_s.so.1
b7f25000-b7f26000 rw-p 0000d000 08:01 368705 /lib/libgcc_s.so.1
b7f26000-b7f27000 rw-p b7f26000 00:00 0
b7f27000-b7f4b000 r-xp 00000000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4b000-b7f4c000 r--p 00023000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4c000-b7f4d000 rw-p 00024000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4d000-b8031000 r-xp 00000000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8031000-b8035000 r--p 000e3000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8035000-b8036000 rw-p 000e7000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8036000-b803c000 rw-p b8036000 00:00 0
b804a000-b804d000 rw-p b804a000 00:00 0
b804d000-b804e000 r-xp b804d000 00:00 0 [vdso]
b804e000-b806a000 r-xp 00000000 08:01 368663 /lib/ld-2.9.so
b806a000-b806b000 r--p 0001b000 08:01 368663 /lib/ld-2.9.so
b806b000-b806c000 rw-p 0001c000 08:01 368663 /lib/ld-2.9.so
bff56000-bff6b000 rw-p bffeb000 00:00 0 [stack]
忽略
这是怎么回事,怎么解决
#include<stdlib.h>
#include<ctime>
using namespace std;
class Matrix
{
public:
Matrix(int Row=0,int Col=0)
:row(Row),col(Col)
{
x=new double[row*col];
for(int i=row*col-1;i>=0;i--)
x=0;
}
void Set()
{
for(int i=row*col-1;i>=0;i--)
x=rand()%10;
}
Matrix transposition(const Matrix &mat)
{
row=mat.col;
col=mat.row;
for(int m=0;m<=row-1;m++)
{
for(int n=0;n<=col-1;n++)
{
x[m*col+n]=mat.x[n*row+m];
}
}
return *this;
}
friend ostream &operator<<(ostream &out,const Matrix &mat)
{
out<<mat.row<<" "<<mat.col<<endl;
for(int m=0;m<=mat.row-1;m++)
{
out<<"["<<mat.x[m*mat.col];
for(int n=1;n<=mat.col-1;n++)
out<<" "<<mat.x[m*mat.col+n];
out<<"]"<<endl;
}
return out;
}
~Matrix()
{
if(x!=NULL) delete []x;
}
private:
int row,col;
double *x;
};
int main()
{
time_t t;
srand(time(&t));
Matrix mat(4,5);
mat.Set();
cout<<mat<<endl;
Matrix mat2;
mat2=mat2.transposition(mat);
cout<<mat2<<endl;
return 0;
}
下面是运行显示的结果
4 5
[0 2 3 8 9]
[5 7 0 8 2]
[3 4 5 1 3]
[2 6 3 5 1]
*** glibc detected *** ./a: free(): invalid next size (fast): 0x091350b0 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7e23604]
/lib/tls/i686/cmov/libc.so.6(cfree+0x96)[0xb7e255b6]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb8006231]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb800628d]
./a[0x8048d5c]
./a[0x80489e3]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7dca775]
./a[0x8048831]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:01 9158821 /home/rob2468/桌面/a
08049000-0804a000 r--p 00001000 08:01 9158821 /home/rob2468/桌面/a
0804a000-0804b000 rw-p 00002000 08:01 9158821 /home/rob2468/桌面/a
09135000-09156000 rw-p 09135000 00:00 0 [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7db3000-b7db4000 rw-p b7db3000 00:00 0
b7db4000-b7f10000 r-xp 00000000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f10000-b7f11000 ---p 0015c000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f11000-b7f13000 r--p 0015c000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f13000-b7f14000 rw-p 0015e000 08:01 386268 /lib/tls/i686/cmov/libc-2.9.so
b7f14000-b7f17000 rw-p b7f14000 00:00 0
b7f17000-b7f24000 r-xp 00000000 08:01 368705 /lib/libgcc_s.so.1
b7f24000-b7f25000 r--p 0000c000 08:01 368705 /lib/libgcc_s.so.1
b7f25000-b7f26000 rw-p 0000d000 08:01 368705 /lib/libgcc_s.so.1
b7f26000-b7f27000 rw-p b7f26000 00:00 0
b7f27000-b7f4b000 r-xp 00000000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4b000-b7f4c000 r--p 00023000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4c000-b7f4d000 rw-p 00024000 08:01 386276 /lib/tls/i686/cmov/libm-2.9.so
b7f4d000-b8031000 r-xp 00000000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8031000-b8035000 r--p 000e3000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8035000-b8036000 rw-p 000e7000 08:01 2312654 /usr/lib/libstdc++.so.6.0.10
b8036000-b803c000 rw-p b8036000 00:00 0
b804a000-b804d000 rw-p b804a000 00:00 0
b804d000-b804e000 r-xp b804d000 00:00 0 [vdso]
b804e000-b806a000 r-xp 00000000 08:01 368663 /lib/ld-2.9.so
b806a000-b806b000 r--p 0001b000 08:01 368663 /lib/ld-2.9.so
b806b000-b806c000 rw-p 0001c000 08:01 368663 /lib/ld-2.9.so
bff56000-bff6b000 rw-p bffeb000 00:00 0 [stack]
忽略
这是怎么回事,怎么解决