2014-09-01 4 views
-3

디버거 (MSVC)가 쓰기 프로세스의 중간 단계에서 예외를 throw하는 이유로 인해 32 비트 정수 bu 배열을 초기화하려고합니다.범위 내에 배열 값을 쓸 때 액세스 위반이 발생했습니다.

배열은 내가 뭔가를 분명 누락 될 수 있습니다 반복 263,152

#define ROM_MAX_SIZE (1024*1024*4) 
int main(){ 
    size_t rom_size = ROM_MAX_SIZE/sizeof(uint32_t); 
    uint32_t *rom = malloc(rom_size); //<-- Error here, must be ROM_MAX_SIZE. See edit 

    for (uint32_t i = 0; i < rom_size; i++){ 
     rom[i] = i; //<--- Access violation here 
    } 
free(rom); 
return 1 
} 


실패 긴 1048576 개 요소하지만 난 그것을 볼 수 없습니다.


편집 :

는 MALLOC 요소의 4 배 여야한다.

uint32_t *rom = malloc(rom_size); //<--- WRONG! 
uint32_t *rom = malloc(ROM_MAX_SIZE); //<--- OK. 
+0

왜 범위 내에 있다고 생각합니까? – juanchopanza

+0

1048576 배열 크기 아래에서 i == 263152 * way * 일 때 디버거가 실패합니다. 게시물에 명시된 바와 같이, 코드 위의 juuust. – NeonMan

+0

Malloc은 1/4 크기입니다. ROM_MAX_SIZE가 아니면 안된다 ROM_MAX_SIZE/4 – NeonMan

답변

5

당신은 현재의 상황이

uint32_t *rom = malloc(rom_size * sizeof(uint32_t)); 

처럼 할당해야 배열은 예상 다음 네 번 작다.

+0

그냥 알아 차리고 그에 따라 편집했습니다. 어쨌든 대답을하십시오. – NeonMan