編譯後顯示指針錯誤
① 急求大神幫忙,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));
}