[英]Segmentation fault on printing pointer value
當我嘗試打印v
的值時,以下程序崩潰。 我想知道為什么。 有什么建議么?
#include <stdio.h>
int main() {
int v[5000000];
printf("\n\nv = %p", v);
return 0;
}
編輯 :如果不分配5000000個元素而不分配500000或更少,程序不會出現段錯誤。
編輯(2) :增加堆棧大小解決了問題。 在Linux上,我在閱讀了stephane-rouberol的答案后增加了堆棧大小(使用ulimit -s <some_large_number>
)。
恭喜,你有堆棧溢出 :)
找到一種方法來增加堆棧的大小或只是動態分配數組:
int* v = malloc( 5000000 * sizeof *v);
/* do something */
free( v );
堆棧溢出 ! 如果你使用bash
或者如果[t]csh
limit stacksize
請參閱ulimit -s
或者不使用堆棧,您可以將堆與malloc
你已經有了原因。 對於將分配v
的程序堆棧, 5000000
太大而無法處理。 你應該用malloc
動態分配它。
程序的堆棧大小取決於編譯器開關,默認值不同於OS到OS。 在你的情況下,它聽起來好像堆棧太小,無法容納那么大的數字。 請參閱編譯器(鏈接器)開關以增加堆棧大小。
嘗試
printf("\n\nv = %p", (void *)v);
正如其他人所說,堆棧溢出。 要了解代碼實際崩潰的原因和時間,這就是行之間的事情:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.