⑴ 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 函数,没处理好也会出这样的问题