[英]Why am I getting segfault from this unsigned int?
我正在嘗試初始化整數數組並將所有元素設置為1.我需要數組的上限為4294967295,或者是32位unsigned int
的最大數。
這對我來說似乎是一項微不足道的任務,它應該是,但我segfault
。 我可以運行for
循環空,它似乎工作正常(盡管很慢,但它處理了近43億個數字,所以我不會抱怨)。 當我嘗試在循環中執行任何類型的操作時,問題似乎出現了。 我在下面的指令 - primeArray[i] = 1;
-導致segfault
錯誤。 盡我所知,這不應該讓我超越陣列。 如果我注釋掉這一行,沒有segfault
。
已經晚了,我疲憊的眼睛可能只是缺少一些簡單的東西,但我可以使用另一雙。
這是我得到的:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>
#define LIMIT 0xFFFFFFFF;
int main(int argc, char const *argv[])
{
uint32_t i;
uint32_t numberOfPrimes = LIMIT; // hardcoded for debugging
int *primeArray = (int*) malloc(numberOfPrimes * sizeof(int));
for (i = 0; i < numberOfPrimes; ++i) {
primeArray[i] = 1;
}
}
檢查malloc()
的返回碼以確保實際分配了數組。 我懷疑以下測試會失敗:
int *primeArray = (int*) malloc(numberOfPrimes * sizeof(int));
if (primeArray != NULL) { /* check that array was allocated */
for (i = 0; i < numberOfPrimes; ++i) {
primeArray[i] = 1;
}
}
您的malloc
調用從系統請求16千兆字節的內存。 如果沒有那么多可用虛擬內存,或者如果您在任何32位系統上運行,則呼叫將失敗。 如果您沒有檢查malloc
的失敗,因為您的代碼沒有,則該數組將為NULL
並且對其元素的任何后續訪問都將導致分段錯誤。
如果你真的需要使用一個大的數組,你需要得到一個帶有大量內存的64位系統,或者重寫你的程序以使用一個較小的工作集,並將其余部分保存到磁盤上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.