先日N次正方行列AとN次元ベクトルxの積y=Axを計算するプログラムについて質問したものです。計算結果は正しく出力されたのですが以下のエラー文も一緒に出てしまいました。mallocでのメモリの確保と開放で何かミスをしたと思われますがどうすればいいのかわかりません。どなたか教えて下さい。
*** Error in `./prog07.exe': free(): invalid pointer: 0x000000000087e014 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x7c503)[0x7f2bf89dd503]
./prog07.exe[0x400a8b]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f2bf8982b35]
./prog07.exe[0x400649]
======= Memory map: ========
00400000-00401000 r-xp 00000000 00:2e 1671678911 /jugyou/elect/16D5104006B/
practice05/exp08/prog07.exe
00600000-00601000 r--p 00000000 00:2e 1671678911 /jugyou/elect/16D5104006B/
practice05/exp08/prog07.exe
00601000-00602000 rw-p 00001000 00:2e 1671678911 /jugyou/elect/16D5104006B/
practice05/exp08/prog07.exe
0087e000-0089f000 rw-p 00000000 00:00 0 [heap]
7f2bf4000000-7f2bf4021000 rw-p 00000000 00:00 0
7f2bf4021000-7f2bf8000000 ---p 00000000 00:00 0
7f2bf874b000-7f2bf8760000 r-xp 00000000 fd:01 207080590 /usr/lib64/
libgcc_s-4.8.5-20150702.so.1
7f2bf8760000-7f2bf895f000 ---p 00015000 fd:01 207080590 /usr/lib64/
libgcc_s-4.8.5-20150702.so.1
7f2bf895f000-7f2bf8960000 r--p 00014000 fd:01 207080590 /usr/lib64/
libgcc_s-4.8.5-20150702.so.1
7f2bf8960000-7f2bf8961000 rw-p 00015000 fd:01 207080590 /usr/lib64/
libgcc_s-4.8.5-20150702.so.1
7f2bf8961000-7f2bf8b17000 r-xp 00000000 fd:01 205769967 /usr/lib64/libc-2.17.so
7f2bf8b17000-7f2bf8d17000 ---p 001b6000 fd:01 205769967 /usr/lib64/libc-2.17.so
7f2bf8d17000-7f2bf8d1b000 r--p 001b6000 fd:01 205769967 /usr/lib64/libc-2.17.so
7f2bf8d1b000-7f2bf8d1d000 rw-p 001ba000 fd:01 205769967 /usr/lib64/libc-2.17.so
7f2bf8d1d000-7f2bf8d22000 rw-p 00000000 00:00 0
7f2bf8d22000-7f2bf8d42000 r-xp 00000000 fd:01 207080593 /usr/lib64/ld-2.17.so
7f2bf8f24000-7f2bf8f27000 rw-p 00000000 00:00 0
7f2bf8f3d000-7f2bf8f41000 rw-p 00000000 00:00 0
7f2bf8f41000-7f2bf8f42000 r--p 0001f000 fd:01 207080593 /usr/lib64/ld-2.17.so
7f2bf8f42000-7f2bf8f43000 rw-p 00020000 fd:01 207080593 /usr/lib64/ld-2.17.so
7f2bf8f43000-7f2bf8f44000 rw-p 00000000 00:00 0
7ffc26e89000-7ffc26eab000 rw-p 00000000 00:00 0 [stack]
7ffc26fda000-7ffc26fdc000 r--p 00000000 00:00 0 [vvar]
7ffc26fdc000-7ffc26fde000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
ソースコードは以下の通りです。
#include<stdio.h> #include<stdlib.h> void PrintVector(int *x, int n){ int i; for(i=0;i<n;i++){ printf("%6d\n",*(x+i)); } } void PrintMatrix(int *a, int n){ int i,j; int *ai; ai=a; for( i = 0 ; i < n ; i++){ for( j = 0 ; j < n ; j++){ printf("%6d", *(ai+j)); } ai+=n; printf("\n"); } printf("\n"); } int main(){ int i, j,n; int *ai;/* 各行の先頭へのポインタを表すポインタを用意する */ int *a, *x, *y;/* 計算結果を代入するための行列を用意 */ printf("N:"); scanf("%d",&n); ai= (int *) malloc(n*sizeof(int)); x= (int *) malloc(n*sizeof(int)); y= (int *) malloc(n*sizeof(int)); if(x==NULL ||y==NULL || ai==NULL){ printf("Can’t allocate memory. \n"); exit(1); } a=ai; for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("A[%d][%d]=",i,j); scanf("%d",ai+j); } ai+=n; } for(i=0;i<n;i++){ printf("X[%d]=",i); scanf("%d",x+i); } printf("A = \n"); PrintMatrix(a,n); printf("x = \n"); PrintVector(x,n); ai=a; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(y+i)+=*(ai+j)**(x+j); } ai+=n; } printf("y = \n"); /* ベクトル y(=Ax) の表示 */ for(i=0;i<n;i++){ printf("%6d\n",*(y+i)); } free(ai); free(x); free(y); return 0; }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/21 12:41