编译后显示指针错误
① 急求大神帮忙,C++编译通过但在cmd运行就出现invalid null pointer,不知道指针哪里错了
打断点,单步执行啊,看看程序是运行到哪里开始出错的。然后再分析原因啊
② 函数返回指针编译错误
L可以当数组一样用,可以用L[0]的方式访问
至于为什么出错,要看你的程序是怎么写的,请写出你的程序。
********************************************
L = (char*)malloc((n1+2)*sizeof(char));
改为
L = malloc((n1+2)*sizeof(char));
R = (char*)malloc((n2+2)*sizeof(char));
改为
R =malloc((n2+2)*sizeof(char));
int n1,n2,i,j; char* L,R;
改为
int n1,n2,i,j; char* L,*R;
③ JAVA编译正常,但是运行出现空指针异常,有大神知道是什么问题吗
④ 空指针错误是什么意思
所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常。
产生空指针异常的原因:
(1) 当一个对象不存在时又调用其方法会产生异常 obj.method() // obj对象不存在
(2) 当访问或修改一个对象不存在的字段时会产生异常 obj.method() // method方法不存在
(4)编译后显示指针错误扩展阅读:
空指针正常工作意义:
在许多语言,这不是一个单独的转义序列,而是八进制转义序列,单个八进制数字为0;因此,‘ ’不能跟随任何数字0通过7;否则它被解释为更长的八进制转义序列的开始。被在使用中发现各种语言的其他转义序列 00,x00,z,或的Unicode表示u0000。
表示空字符的能力并不总是意味着生成的字符串将被正确解释,因为许多程序将认为null作为字符串的结尾。因此,键入它的能力(在未经检查的用户输入的情况下)会创建一个称为空字节注入的漏洞,并可能导致安全漏洞。
空字符以逗号表示是^@。在Windows上,可以通过按住Ctrl键,然后按@(这通常需要同时按下⇧ Shift并按下数字2键)。
参考资料:网络——空指针
⑤ c语言定义指针后编译出现[Warning] initialization makes pointer from integ
不要把整数直接赋值给指针,把int *p=num2改为int *p=&num2
⑥ 求问大佬哪错了,编译正确,但运行时但系统一直提示有个指针指空了,为什(C++)
应该是有个指针类型的,没给值就使用了,编译的时候虽然通过了,但是不会不给提示警告吧。
查查,跟踪这个指针,直到出问题的那行
⑦ 写了个关于指针的C++程序,但总是提示错误,求高手指正,感激不尽。
做了一个测试, 编译器对指针的用法有限制
比如 定义的ch指针
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
char *ch="book";
//char ch[]="book";
int val[]={1,2,3,4};
char *p;
p=ch;
p[1]=p[3];
cout<<p<<endl;
system("pause");
return 0;
}
此时就会报和你一样的错误
想法将ch设置成数组变量就是 //char ch[]="book";
那么就可以正确显示结果
我认为原因是由于c++对赋值操作的限制导致的,也就是说赋值操作符左边必须是个可见的对象或是变量,比如所ch为数组型的时候,对于数组的每个元素都是一个对象,b o o k的内存位置对对应着对象就是a[0],a[1],a[2],a[3],也就是在内存的地址上是存在对象的,而当ch 是指针型的时候,b o o k存储位置并没有对象对应,所以不能赋值
下列可证
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
char *ch="book";
//char ch[]="book";
int val[]={1,2,3,4};
char a='a';
char *p;
p=ch;
p[3]=a;
cout<<p<<endl;
system("pause");
return 0;
}
仍然会报异常
可见数组时一个特殊的数据结构,其中的每个元素都是对象
⑧ c语言指针 编译正确 运行出现错误 为什么
1. void find(int *a,int n,int *max,int *maxpos,int *min,int *minpos)定义的时候参数全是指针,
但是你再调用的时候find(array,n,*max,*maxpos,*min,*minpos); 这里传进去的参数全是 值
应该写成find(array,n,max,maxpos,min,minpos)
2.printf("max=%d, maxpos=%d, min=%d, minpos=%d\n",max,maxpos,min,minpos);这里输出的时候,max,maxpos...这些都是指针,要输出值得话得写成
printf("max=%d, maxpos=%d, min=%d, minpos=%d\n",*max,*maxpos,*min,*minpos)
PS:至于你定义的那个函数本身有没有问题,没有运行还不知道,但是看着感觉语法啥的很乱,调理不是很清楚,真心不明白你准备干嘛?
⑨ 指针错误
你好歹也得说哪里指针错误了,或者,指针错误发生后有什么现象,以及你的输入是什么。你提问题的能力也太差了点!
⑩ C++语言指向函数的指针编译错误
#include<stdio.h>
#include<stdlib.h>
int main()
{
void operate(int,int,int(*)(int ,int));
int max(int , int),min(int , int );
int a,b;
printf("Please input two numbers:\n");
scanf("%d %d",&a,&b);
operate(a,b,max);
system("pause");
return 0;
}
int max(int a,int b)
{
if(a>b)
return(a);
else
return(b);
}
int min(int a,int b)
{
if(a>b)
return(b);
else
return(a);
}
void operate(int x,int y,int(*fun)(int ,int ))
{
printf("%d\n",(*fun)(x,y));
}