⑴ c語言中關於出現Access Violation的錯誤怎麼解決程序量有點兒大解決後比重賞!
可能是你使用了野指針造成的
⑵ C語言文件access violation
文件不關閉,還要 又寫又讀。那麼要注意:
(1)文件指針當前位置在哪裡
(2)必須保證 寫語句寫的內容已經及時寫出。
rewind(..) 可以把文件指針撥到文件頭。
用 fseek() 搬動文件指針。
其它,ftell() ...等 函數,告訴文件指針當前位置,記錄當前位置,跳到某位置。
為保證及時寫出,讀寫轉換處必需加 fflush(...)
不想那麼麻煩,你就寫歸寫,讀歸讀。
打開寫,寫完了關閉。
打開讀,讀完了關閉。
指針位置亂套,內容還在緩沖區,沒正式寫出就去讀,很容易發生 ACCESS VIOLATION。
⑶ c語言調試錯誤:"Access Violation "
sp=(char**)malloc(sizeof(char**)*WIDTH*n);
這里動態分配的是二重指針的數組
到了這里:StringGen(sp[i*WIDTH]);
雖然傳遞進去的是一個指針,但是該值並未初始化啊,指向不明,於是函數中ssp[i]=當然會說該空間不能訪問,應當為每個元素重新分配一個字元數組空間才行
⑷ C語言調試出錯 0xC0000005: Access Violation.
修改如下:
//---------------------------------------------------------------------------
#include<stdio.h>
#include<string.h>
#include <ctype.h>/*注意這里*/
void input(float a[][4],char name[][30],int d)
{
long b,c,m,t;
char x[30];
printf("輸入學生個數:");
scanf("%d",&m);
for (b=d-1;b>=d-m;b--)
{printf("姓名:");
scanf("%s",name[b]);
printf("學號:");
scanf("%f",&a[b][0]);
printf("語文成績:");
scanf("%f",&a[b][1]);
printf("數學成績:");
scanf("%f",&a[b][2]);
printf("英語成績:");
scanf("%f",&a[b][3]);
}
for(b=d-1;b>0;b--)
for(c=b-1;c>=0;c--)
{if (((a[b][1]+a[b][2]+a[b][3])/3)>((a[c][1]+a[c][2]+a[c][3])/3))
{{strcpy(x,name[b]);strcpy(name[b],name[c]);strcpy(name[c],x);}/*****注意這里,x[0]改為x,name[b][0]改為name[b],name[c][0]改為name[c]*/
{t=a[b][0];a[b][0]=a[c][0];a[c][0]=t;}
{t=a[b][1];a[b][1]=a[c][1];a[c][1]=t;}
{t=a[b][2];a[b][2]=a[c][2];a[c][2]=t;}
{t=a[b][3];a[b][3]=a[c][3];a[c][3]=t;}}
}
}
void chazhao(float a[][4],char name[][30],int z)
{
int m,n;
printf("輸入學號:");
scanf("%d",&m);
for(n=0;n<z&&(a[n][0]!=0);n++)
{if (a[n][0]==m)
{/*********************注意這里*/
printf("第%d名:",n+1);
printf("%s",name[n]);
printf("學號:%.0f 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 平均分:%.2f\n",a[n][0],a[n][1],a[n][2],a[n][3],((a[n][1]+a[n][2]+a[n][3])/3));
}/*********************注意這里*/
}
}
void shuchu(float a[][4],char name[][30])
{
int c,m;
printf("輸入要查看的學生個數(分數由高到低):");
scanf("%d",&m);
for (c=0;c<m&&(a[c][0]!=0);c++)
{printf("第%d名:",c+1);puts(name[c]); printf("學號:%.0f 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 平均分:%.2f\n",a[c][0],a[c][1],a[c][2],a[c][3],((a[c][1]+a[c][2]+a[c][3])/3));}
}
main()
{
float a[400][4]={0};
char b[400][30];
int e;
int m=400;
int n=4;
loop: printf("\n 主菜單\n===================================\n\t1.輸入學生分數\n\t2.根據學號查看學生成績\n\t3.輸出前N名學生的成績\n\t0.退出\n===================================\n");
scanf("%d",&e);
switch(e)
{case 1:input(a,b,m);goto loop;
case 2:chazhao(a,b,m);getch();goto loop;
case 3:shuchu(a,b);
getch();goto loop;
case 0:printf("謝謝使用!"); getch();break;
default:printf("輸入錯誤!");getch();goto loop;
}
}
//---------------------------------------------------------------------------
⑸ C語言調試的時候出現access violation.程序如下..
malloc一塊內存,只要這塊內存足夠你要表示的數據或對象的大小,你可以用這塊內存表示任意一種類型的數據或對象。
舉個例子
你可以int*p=(int*)malloc(4);
你同樣可以DWORD*p=(DWORD*)malloc(4);
malloc的時候系統並不管你這塊內存被誰用
至於編譯器怎麼知道Next成員的,是通過.運算符和->運算符計算出來的
structlist
{
intNum;
intData;
structlist*Next;
};
編譯器在編譯這個結構體的時候就已經知道list總共是12位元組,第一個4位元組是Num,第二個4位元組是Data,第三個4位元組是Next;只要你將一塊>=12位元組的內存塊傳給structlist*p,那麼p->Num:編譯器就自己對應前4位元組,p->Data對應第2個4位元組,p->Next對應第3個4位元組,如果內存塊大於12位元組,後面多餘的內存不對應任何值。
template<classT>intList<T>::Length()const
{LinkNode<T>*
current=first;
intelemnum=0;
while(current->link!
=NULL)//如果頭結點指針域為NULL則不執行循環直接返回0值{
current=current->link;
elemnum++;}
returnelemnum;}//返回頭指針template<classT>
LinkNode<T>*List<T>::getHead()const{
returnfirst;}//搜索並返回指針template<classT>LinkNode<T>*
List<T>::Search(Tx)const{
LinkNode<T>*current=first->link;
//current=first循環的判斷寫成
current->link!=NULL,
是等價的while(current!=NULL)
{if(current->data==x)
break;
else
current=current->link;
}returncurrent;/
/定位並返回指針template<classT>LinkNode<T>*List<T
>::Locate(inti)const//定位可能I為
{//cout
<<"hello3"
<<endl;
cout
<<current->data<<endl;
current=current->link;
}}//排序template<classT
>voidList<T>::Sort()
{LinkNode<T>
current1,*current2;
for(current1=first->
link;current1!=NULL;
current1=current1->link)
{
//intflag=0;//插入標志不適用最小選擇排序
for(current2=current1->
link;current2!=NULL;current2=current2->
link){
if(current1->data
>current2->data)
{
//flag=1;
Ttemp;
temp=current1->data;
current1->data=current2->data;
current2->data=temp;
}
}
//if(flag==0)//
{// cout<<"提前排序完成"<<endl;//
break;//}}
}
Head=(Link)malloc(MAX*sizeofNode)分配了10個Node,Next變數已經有了,但是Next變數你沒賦值,你應該是希望Head[0].Next=&Head[1];Head[1].Next=&Head[2];等等
⑹ 一個c語言關於access的問題,為什麼總是出錯,程序如下:
你的程序是在別地方復制來的吧,
access是一個有兩個參數的函數,你這里根本就沒有函數體啊!好好看看吧!~
⑺ C語言 access violation
修改兩個地方
double a,c; 變成 float a,c;
因為你後面用的是%f
scanf("%f",a);變成scanf("%f",&a);
你要給scanf的參數是一個指針,一個存放數值的地方,而不是一個數值
⑻ C語言程序access violation
一般是指針,地址類錯誤,導致訪問了錯誤的內存空間
一般說來,你的 c 程序開始,結束都是 main () 函數;但編譯出來的可執行代碼不是這樣,一般會給你連接 link 上一個「標准件」,它來准備 main () 函數的運行空間,並在 main () 結束後進行一些清理什麼,你可以從這方面著手排查
如果你用 c++, 或者你進行了中斷處理,或者有系統的 callback 函數,沒處理好也會出這樣的問題