PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/05/21 23:24:19
Name greensocks
Subject c언어 관련 급질요...
임의의 ROW열의 수와 COLUMN열의 수를 받아

1을 랜덤하게 생성하는 코드를 만드는데요

이상하게 500x250행렬까지는 되는데

1000x500은 디버그 애러가 뜨네요

왜 이런거죠?

ROW_MAX가 ROW 갯수
COLUMN_MAX가 COLUMN 갯수
NUM_ROW가 1개의 ROW에 생성되는 1의 갯수
NUM_COLUMN이 1개의 COLUMN에 생성되는 1의 갯수

를 의미합니다.

for(i=0; i<ROW_MAX-NUM_ROW; i++){
  for(j=0; j<NUM_COLUMN; j++){
   while(1){
    temp = rand()%COLUMN_MAX;
    if(H[i][temp] == 0 && num_row[temp]<NUM_ROW){
     H[i][temp] = 1;
     num_row[temp]++;
     break;
    }
   }
  }
  temp=0;
  for(k=0; k<COLUMN_MAX; k++){
   if(H[i][k]==1){
    temp++;
   }
  }
}

for(j=0; j<NUM_ROW; j++){
  for(i=0; i<COLUMN_MAX; i++){
   if(num_row[i]==j){
    H[ROW_MAX-j-1][i] = 1;
    num_row[i]++;
    count++;
   }
  
   if(count==NUM_COLUMN){
    break;
   }
  }
  for(i=0; i<COLUMN_MAX; i++){
   if(num_row[i]<NUM_ROW){
    H[ROW_MAX-j-1][i] = 1;
    num_row[i]++;
    count++;
   }
   if(count==NUM_COLUMN){
    break;
   }
  }
  count=0;
}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
꿀호떡a
10/05/21 23:28
수정 아이콘
배열을 너무 작게 선언하신 것이 아닌가요?
WizardMo진종
10/05/21 23:31
수정 아이콘
배열 생성 어떤식으로 하셨나요? 전체 코드를 봤으면 하는데;;;
greensocks
10/05/21 23:31
수정 아이콘
배열을 선언할때도 int H[ROW_MAX][COLUMN_MAX]=
; 이런식으로 선언했는데요..
greensocks
10/05/21 23:31
수정 아이콘
전체 코드 입니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <iostream>
using namespace std;

#define R 16807.0 /* multiplier */
#define M 2147483647.0 /* modulus */
#define COLUMN_MAX 500
#define ROW_MAX 250
#define NUM_ROW 3
#define NUM_COLUMN 6
double seed = 0.1;

double rnd() // generate a uniform r.v

seed = fmod(R * seed, M);
return(seed * 4.656612875e-10);


double gasdis() // generate a normal r.v

static double t = 0.0;
double x, v1, v2, r;

if (t == 0) {
do {
v1 = 2.0 * rnd() - 1.0;
v2 = 2.0 * rnd() - 1.0;
r = v1 * v1 + v2 * v2;
while (r >= 1.0);

r = sqrt(-2.0 * log(r) / r);
t = v2 * r;
return(v1 * r);
}
else

x = t;
t = 0.0;
return(x);

}


int main()

double error, output, ratio, r_code[COLUMN_MAX], VAR = 1.0;
int i, j, n, k, b_e = 0,a_e = 0, signal, count=0, err=0, H[ROW_MAX][COLUMN_MAX]={
;
int num_column = 0, num_row[COLUMN_MAX]=
, message[ROW_MAX]=
, temp;
int code[COLUMN_MAX]=
, check[COLUMN_MAX];

srand((unsigned)time(NULL));


for(i=0; i<ROW_MAX-NUM_ROW; i++)

for(j=0; j<NUM_COLUMN; j++){
while(1){
temp = rand()%COLUMN_MAX;
if(H[i][temp] == 0 && num_row[temp]<NUM_ROW){
H[i][temp] = 1;
num_row[temp]++;
break;

}
}
temp=0;
for(k=0; k<COLUMN_MAX; k++)

if(H[i][k]==1){
temp++;

}
}

for(j=0; j<NUM_ROW; j++)

for(i=0; i<COLUMN_MAX; i++){
if(num_row[i]==j){
H[ROW_MAX-j-1][i] = 1;
num_row[i]++;
count++;


if(count==NUM_COLUMN)

break;

}
for(i=0; i<COLUMN_MAX; i++)

if(num_row[i]<NUM_ROW){
H[ROW_MAX-j-1][i] = 1;
num_row[i]++;
count++;

if(count==NUM_COLUMN)

break;

}
count=0;
}
WizardMo진종
10/05/21 23:33
수정 아이콘
코드가 문제될건 없어보이는데 배열을 동적할당으로 바꿔보실래요?
greensocks
10/05/21 23:35
수정 아이콘
WizardMo진종님// 동적할당이 뭐죠... ^^;;
WizardMo진종
10/05/21 23:35
수정 아이콘
배열을 그냥 사이즈로 잡아버리면 메모리 일정 크기까진 되는데 그거 넘어가면 메모리 부족으로 에러가 날겁니다. 교재 뒤쪽 보시면 동적 메모리 할당 이라고 해가지고 스택과 힙 영역에 관한 부분이 있을꺼에요
greensocks
10/05/21 23:38
수정 아이콘
WizardMo진종님// 정말 죄송한데 링크 걸어주신걸 봐도 전혀 이해가 안되서 그러는데 제코드의 경우 어떤부분을 바꿔야하는지 알려주시면 안될까요.. ㅠㅠ
WizardMo진종
10/05/21 23:45
수정 아이콘
간단하게 말해서;;;
배열을 만드는 방법에는

위에처럼 만드는 방법과
다른 한가지 방법이 더 있습니다.
-------------------------------
#include <stdio.h>
#include <stdlib.h>

int main(void)

int **array;
int a=5, b=5, i;

array = (int **)malloc( sizeof(int) * a); //행의 수만큼 동적으로 할당함 */
for (i=0; i<a; i++){ //열의 수만큼 각 행에 동적으로 메모리 공간을 할당함 */

array[i] = (int *)malloc( sizeof(int) * b);


for(i=0; i<a; i++)

free(array[i]); //열에 해당하는 메모리공간 해제

free(array); //행에 해당하는 메모리 공간 해제

return 0;
}
-------------------------------
이런방법이 있습니다.//<a href=http://lejewk.tistory.com/69#recentTrackback target=_blank><a href=http://lejewk.tistory.com/69#recentTrackback</a> target=_blank>http://lejewk.tistory.com/69#recentTrackback</a></a> 참조

저 소스가 일단 딱히 눈에 띄게 잘못된건 없어보이는데 배열크기를 늘렸을때 문제라면 스택영역에 배열을 잡아서 그런거 같습니다. c언어에서 일단 메모리관리 부분을 읽어보시고,,, 그다음에 malloc이라는 함수를 쓰시면 될꺼는 같습니다.
WizardMo진종
10/05/21 23:47
수정 아이콘
http://shings47.tistory.com/155
관련글 블로그 입니다.
꿀호떡a
10/05/21 23:56
수정 아이콘
int main()
을 포함한 함수 영역 내에는 크기가 큰 배열을 잡지 않는 것이 배열 할당의 기본입니다. 이유는 진종님이 말씀해주신 이유와 같습니다.
쉽게 말하면, 함수 안의 메모리를 할당할 때 스택이라는 걸 사용합니다. 이 때 메모리를 무한정 줄 수는 없고 컴파일러에서 적당히 크기를 잡아서, 쉽게 말하면 이 함수에는 메모리 얼마, 하는 식으로 스택 영역 크기를 조절하게 됩니다. 그래서 그 영역 크기를 넘어가는 크기의 배열을 만들면 예상치 못한 동작을 하게 됩니다.

이 문제를 해결하시려면 1. 변수를 전역 변수로 할당하시거나(현재는 int main() 안에 선언되어 있던 것을 밖으로 옮겨 전역 변수로 선언하시면 됩니다) 2. 동적 할당으로 배열을 사용하시거나 3. 컴파일러 옵션을 건드리셔서 스택 영역의 메모리 크기를 늘리시면 됩니다.
10/05/22 00:01
수정 아이콘
동적 배열이라는거 자체를 배우시고 하는데 무리가 있으시다면..

스택 영역을 늘려주면 됩니다.
프로젝트 - Properties - Linker - System 에 가셔서
Stack Reserve Size 이부분을
4000000 (4백만)
으로 고치시면 Stack의 기본영역이 4메가로 설정됩니다. (Stack의 기본은 1메가)

그리고 1000*500으로 배열을 잡으시면 2기가 영역 주소를 돌파하기 때문에..
에러가 나는군요..
그래서

Enable Large Address 이 옵션을 Support Address Large Than 2 Gigabytes 라고 주시면 됩니다.

.NET 2003이상버전으로 하시면 되구요.. 그이하버전은 옵션조절을 잘 모르겠네요~
10/05/22 01:08
수정 아이콘
글쓴분 실력에서는 전역변수를 사용하는 것이 가장 바람직 하겠네요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
82250 이 사진의 장소가 어디인지쫌 맞춰주세요.. [1] journey212145 10/05/22 2145
82249 캔커피 건강에 나쁜가요?? [20] 골드똥7369 10/05/21 7369
82248 이공계 졸업논문 질문입니다 [6] goEngLanD2805 10/05/21 2805
82247 승부조작이 처음에 어떻게 알려졌나요? [2] 김지호2697 10/05/21 2697
82246 다수결에 관한 질문입니다. [3] 인필드2133 10/05/21 2133
82245 온겜 타임머신 사용 잘 되시나요? [5] 빵pro점쟁이2127 10/05/21 2127
82244 노래 제목 질문입니다. 화이트데이2123 10/05/21 2123
82243 오늘 올드보이 BGM !!(궁금궁금해 죽겠습니다ㅜㅜ) [4] 굿데이 그만둬2100 10/05/21 2100
82242 c언어 관련 급질요... [16] greensocks2148 10/05/21 2148
82241 데몬 보내주실 분 없나요. [5] Kaga2160 10/05/21 2160
82240 강민선수와 최연성선수가 사이가 나쁜가요? [5] greensocks4760 10/05/21 4760
82239 피아노곡 추천좀 해주세요. [27] 강나라3106 10/05/21 3106
82238 상견례 장소 (부산) 문의드립니다.. [3] 테돌이1930 10/05/21 1930
82237 스타리그 결승전 몇시까지 가야할까요? [1] 바꾸려고생각1820 10/05/21 1820
82236 노래 제목 좀 알려주세요. [1] 일루전1954 10/05/21 1954
82235 파이썬에서 프저전 질문이요~ [6] Dizzy1966 10/05/21 1966
82234 조작 연루된 자들의 차기 시즌 시드는 어떻게 처리되나요? [9] 슬픈눈물2117 10/05/21 2117
82233 스타2 해상도가 어느정도인겁니까?? [1] 후니저그2434 10/05/21 2434
82232 아이폰 구입 질문입니다. [2] 공무원욕하지1838 10/05/21 1838
82231 프로게이머들 흡연여부 [7] Valueinvester3513 10/05/21 3513
82230 지금 iccup 접속이 되나요? [1] H.B.K2148 10/05/21 2148
82229 스타뒷담화 질문입니다. [7] C.P.company2309 10/05/21 2309
82228 인터넷으로 워3을 까는 방법이 있다는데 어떻게 하는 건가요? [4] 언데드네버다1885 10/05/21 1885
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로