我想问一下为什么这个C语言程序运行出错了? #include<stdio.h> #include<

我想问一下为什么这个C语言程序运行出错了?
#include<stdio.h>
#include<stdlib.h>
void f1(int *p)
{
*p=5;
}
void main()
{
int **p=NULL,i,m=0;
scanf("%d",&i);
while(i)
{
p[m]=(int *)malloc(4);
f1(p[m]);
scanf("%d",&i);
}
}

第1个回答  2013-10-09
主要原因是**p=NULL;这句是说p所指的地址为0,你的p[m]=(int *)malloc(4);
就可以看成*(p+m),此时p为0,m也为0,也就是对*(0)进行了赋值,对0地址是不允许进行赋值操作的追问

p[m]不是表示地址吗?等号右边不也是地址吗?我是这样理解的,这样负值不是吗?

右边是分配得到了内存!

给左边

追答

p[m]确实是地址,但问题是p[m]是访问0地址呀,你那样写就是对0地址空间的内容进行赋值,系统中一般都会规定不能访问0地址的,你对一个空指针赋值肯定出错了

追问

p[m]=(int *)malloc(4);不是相当于
int. *p=NULL;
p=(int*)malloc(sizeof(int));吗?

追答

int. *p=NULL;这个p的地址系统自动分配的一个栈空间的地址,所以那样当然没问题,但你的p[m]是一个二级指针中的元素,你初始化时给其赋值了0,所以就成了访问0地址了呀!你要弄清二级指针的意思

追问

╮(╯▽╰)╭好吧

第2个回答  2013-10-06
变量m赋值为零
主函数中变量p被声明为了指向指针的指针,应该是int *p
数组大小确定,你没必要在之后动态分配内存,一开始直接声明个数组不就行了
while也是一个死循环追问

呃呃知道,我只是为了知道指向指针的指针这样操作是否可以?p[m]应该改成p[m++]谢谢!

追答

那也不对,你那么做只会改写无效内存,是个bug

追问

怎么说呢???不太明白!

第3个回答  2013-10-08
因为你把现在p是一个空指针,
p[m]相当于*p,
你对空指针解除引用当然是错误的追问

不太理解,可以说明白点吗?

我想问一下为什么这个C语言程序运行出错了? #include<stdio.h> #...
主要原因是**p=NULL;这句是说p所指的地址为0,你的p[m]=(int *)malloc(4);就可以看成*(p+m),此时p为0,m也为0,也就是对*(0)进行了赋值,对0地址是不允许进行赋值操作的

C语言编译无法通过。。。 #include<stdio.h> #include<stdlib
显然是你的编译器比较老旧 fwrite(student,sizeof(struct Student_type),3,fp);加个struct 即可

...输入#include<stdio.h>,为什么运行时出现错误?怎样指定include的途...
include<stdio.h>应该没有错误啊,你试试#include "stdio.h"还不行的话就是你编译器安装时的环境变量没配置好,编译器找不到正确的路径。

关于c语言的,下面这个程序哪错了?? #include "stdio.h" #include "s
请注意你fputc里面用的是ch,但是你程序里ch从来都没有赋过值。请把第一个while循环fputc中的ch改为c1,第二个循环c2,以此类推即可改正错误。写程序的时候注意理解程序的每一步,希望我的回答对你有帮助。

为什么我C语言程序用到#include"stdio.h"时老是出现这样的错误_百度知 ...
路径不对。有一个介绍。教你怎么改。Option->save Option.里改一下。或者把TurbC放到C盘里。

我想问一下为什么这个C语言程序输入无法停止 #include<stdio.h>...
因为你第二个数组输入赋值给了a[],应该给b[]的吧。导致ch始终不会为'\\n'。还有就是你最后的for循环里p的值是不会大于1的,因为你在下一次循环进行前已经把a[i+1]和b[i+1]做成一样了。

C语言上机为什么说#include<stdio.h>出错呢?
打不开不是你的错,是你安装时的错,检查你TC里的相关设置,实在不行重新安到c:\\就行了。哦?那绝对是你的TC有问题,要么是有病毒什么的杀毒者把它损坏了,反正是坏了,建议你去用个好点版本的TC。(如果从网上下的话弄不好有毒的,无论是毒还是杀毒的都可能弄坏你的这个程序)...

c语言编译中stdio.h不能调用出错的原因是什么,如何解决
楼上的说的没错,最好将错误信息贴出来,才能确定原因。不过一般有这么几个可能性:1.找不到“stdio.h”文件,解决方法是,你在你的硬盘中搜索这文件,看在哪个目录下,将这些头文件的目录,设定到C环境中的include目录里;如果你搜索不到这文件,说明这文件被误删了,你可重装C环境。2.你定义的...

...大神,c语言,求救了,运行之后没反应#include<stdio.h> #include<s
magic函数里面的for语句死循环了,当number=14的时候 for循环始终退不出去,我简单修改了下 如下 void magic(linklist &L){ int i,number=1;linklist s;s=L;s->info=1;while(number!=14){ number++;if(number>13) break;for(i = 0;i<number;i++){ s = s->next;if(s->info !=...

#include <stdio.h>哪错了
C:\\Program Files\\Microsoft Visual Studio\\VC98\\ATL\\INCLUDE C:\\Program Files\\Microsoft Visual Studio\\VC98\\CRT\\SRC 如果你装在其他盘里,则仿照其路径变通就行(我就是装在D盘)。关键是microsoft visual studio\\ 后面的东西要相同。本人深受其害,重装多次不管用,上面中文部分为高手借鉴,...

相似回答