分段錯誤發生在這個函式中:
#include <stdio.h>/span>
#include <stdlib.h>
int heap [999],heap2 [999] 。
int* addDigit(int *arr。int SIZE, int D) {
int con=0;
for (int i = 0; i < SIZE; i )
con = con * 10 arr[i];
con = D。
int p = 0;
while (con >= 0) {
heap[p] = con % 10;
con /= 10;
p ;
}
for (int i = 0; i < p; i )
printf("%d", heap[i]) 。
heap2[0] = 11;
heap2[1] = -1;
int *pp = heap2;
return pp;
}
這是主函式:
int main() {
int N, digit;
scanf("%d", &N) 。
int arr[N];
for (int index = 0; index < N; index ) {
scanf("%d", & arr[index])。
}
scanf("%d", &digit);
int *ptr = addDigit(arr, N, digit)。
int index = 0;
while (*(ptr index) !=-1) {
printf("%d"/span>, ptr[index])。
index ;
}
return 0;
}
為什么我在這里得到一個分段故障呢?
這個程式得到像[1 2 3]這樣的陣列輸入和k值,例如3。
它應該列印1 2 6。
我在這里使用了兩個全域宣告的陣列。
uj5u.com熱心網友回復:
一般來說,定位分段故障來源的最快方法是用-g標志編譯程式,在可執行檔案中包含除錯資訊,然后用Valgrind運行該程式。
在這種情況下,分段故障發生在讀取heap這里:
while (con >= 0)
{
heap[p] = con % 10;
con /= 10;
p ;
}
變數con最終將變成0,并且由于重復除以10,將保持在0。它不會變成負數,因此while-loop將無限地重復。索引 p 將會增加,直到程式試圖訪問 heap 的 999 元素 - 這已經超出了邊界,也就是說,這是一個分段故障。
也許你想寫while (con > 0)?當con為零(而不是之前的負數)時,這將停止回圈。或者你需要一個不同的解決方案,這取決于代碼的預期功能到底是什么。
PS。分段故障并不發生在 "編譯器中",它是在程式執行時發生的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322452.html
標籤:
上一篇:如何選擇表格?
