程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言,這個程序在運行的過程中,為什麼說內存不能讀取?

C語言,這個程序在運行的過程中,為什麼說內存不能讀取?

編輯:C語言問答

C語言,這個程序在運行的過程中,為什麼說內存不能讀取?

#include<stdio.h>
void main()
{
int a[3][3],b[3],c[3],d[3],i,j,*m;
printf("請輸入一個3*3的矩陣:\n");
for(i=0;i<=2;i++)
{
m=a[i];
for(j=0;j<=2;j++,m++) scanf("%d",m);
}
for(m=*a,i=0;i<=2;m+=3) b[i]=*m;
for(m=*a+1,i=0;i<=2;m+=3) c[i]=*m;
for(m=*a+2,i=0;i<=2;m+=3) d[i]=*m;
for(m=b,i=0;i<=2;i++,m++) a[0][i]=*m;
for(m=c,i=0;i<=2;i++,m++) a[1][i]=*m;
for(m=d,i=0;i<=2;i++,m++) a[2][i]=*m;
for(i=0;i<=2;i++)
{
m=a[i];
for(j=0;j<=2;j++,m++) printf("%d ",*m); printf("\n");
}
}

最佳回答:

int a[3][3],b[3],c[3],d[3],i,j,*m;
......
for(j=0;j<=2;j++,m++) scanf("%d",m);
指針一般要分配空間才能用,或者指定一個起始地址,你的這個錯誤的原因就是你只是定義了*m但是你沒有初始化它,那麼就沒有指向任何內存地址,屬於隨機地址,那麼你就引用不到那個地址,就導致內存不能“read” 指針一般要麼直接初始化 如 char *s="abecesaa"; 要麼就把一個數組的首地址付給他如 char a[4]; char *s=a; 要麼 就要給他分配空間 如 char *s=(char *)malloc(sizeof(char));或其他的初始化操作後才能使用正確。看樓主題意不用指針會很簡單,指針雖然效率比數組高,但是簡單問題復雜化,未免有點大材小用。指針有很多的有點,但是對於初學者不建議使用,因為這個會在使用的過程中出現很多問題,絕大部分是指針沒初始化或初始化不正確,防不勝防!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved