1 00:00:00,000 --> 00:00:10,970 >> [음악 연주] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. 마란 : 좋아요. 3 00:00:12,536 --> 00:00:13,392 >> [웃음] 4 00:00:13,392 --> 00:00:14,240 >> 다시 오신 것을 환영합니다. 5 00:00:14,240 --> 00:00:14,990 이 CS50입니다. 6 00:00:14,990 --> 00:00:16,890 이 주 5의 끝. 7 00:00:16,890 --> 00:00:20,020 그리고 지금까지, 우리는 꽤 많이했습니다 부여를 위해 복용하고 거기 8 00:00:20,020 --> 00:00:23,480 당신이가이 컴파일러 연타를 존재 이 방식으로 호출되어 9 00:00:23,480 --> 00:00:27,100 다른 도구는 어떻게 든 확인 전화 마법의 소스 코드를 변환 10 00:00:27,100 --> 00:00:31,350 오브젝트 코드를 0과 1로 당신의 컴퓨터 CPU, 중앙 11 00:00:31,350 --> 00:00:33,410 처리 장치는, 실제로 이해한다. 12 00:00:33,410 --> 00:00:36,770 의 숫자가 거기 밖으로하지만 변 에 후드 아래에가는 13 00:00:36,770 --> 00:00:38,690 입력과 출력 사이. 14 00:00:38,690 --> 00:00:41,800 >> 그리고 나는 우리가 육체 제안하고 싶습니다 좀 더 자세하게에있는 것을 밖으로 15 00:00:41,800 --> 00:00:45,130 이 네 단계라는 뭔가를 사전 처리, 뭔가 16 00:00:45,130 --> 00:00:48,300 우리가 보았 컴파일,라는 뭔가 조립라고하며, 17 00:00:48,300 --> 00:00:49,420 뭔가 연결했다. 18 00:00:49,420 --> 00:00:53,270 그래서 지금까지, 우리의 일부 프로그램은, 우리는 날카로운 포함 했어. 19 00:00:53,270 --> 00:00:56,650 더 최근에 우리는 일부 날카로운 했어 상수를 정의합니다. 20 00:00:56,650 --> 00:01:00,660 그래서 밝혀 것들이 그 해시 기호 또는로 시작하는 21 00:01:00,660 --> 00:01:04,150 파운드 기호는 전 처리기입니다 지시어. 22 00:01:04,150 --> 00:01:07,960 그건 그냥 그건 말하는 멋진 방법 실제로 코드의 라인 23 00:01:07,960 --> 00:01:12,280 전에 다른 무언가로 변환 컴퓨터도 변환하려고하여 24 00:01:12,280 --> 00:01:13,800 0과 1로 프로그램입니다. 25 00:01:13,800 --> 00:01:19,000 >> 예를 들어, 날카로운 표준을 포함 I / O. 시간이 꽤 많이 그냥 가서 의미 26 00:01:19,000 --> 00:01:24,010 앞서, 파일의 내용을 잡아 stdio.h에 오른쪽이 붙여 넣습니다. 27 00:01:24,010 --> 00:01:25,880 그래서 아무 제로하지 않으며 사람 아직 그 시점에서. 28 00:01:25,880 --> 00:01:27,470 그것은 정말로 단지 대체입니다. 29 00:01:27,470 --> 00:01:30,790 그리고는 소위 동안 이루어집니다 사전 처리 단계 때 30 00:01:30,790 --> 00:01:34,230 실제로 구체적으로 연타를 실행하거나 대부분의 경우에서 확인합니다. 31 00:01:34,230 --> 00:01:36,950 그래서이 모든 일이되었습니다 먼저 자동으로 지금까지. 32 00:01:36,950 --> 00:01:38,800 >> 그런 다음 컴파일 단계가 온다. 33 00:01:38,800 --> 00:01:40,920 그러나 우리는 단순화 봤는데 컴파일. 34 00:01:40,920 --> 00:01:45,060 프로그램을 컴파일하는 것은 정말로 의미 , C 같은로부터 받아 35 00:01:45,060 --> 00:01:48,430 소스 코드를 우리는 아래로, 쓰기 봤는데 뭔가 어셈블리를 호출합니다. 36 00:01:48,430 --> 00:01:52,900 어셈블리 언어는 낮은 수준 언어에게 다행히도, 우리는하지 않습니다 37 00:01:52,900 --> 00:01:55,480 많은에 기회있다 이번 학기를 작성합니다. 38 00:01:55,480 --> 00:01:59,100 그러나 그것은에서 가장 낮은 수준의 당신은 문자 그대로 쓰기 시작하는 의미 39 00:01:59,100 --> 00:02:04,270 더하기 및 빼기와 곱하기 및로드 메모리와 저장 메모리, 40 00:02:04,270 --> 00:02:08,259 아주 기본적인 지시하는 컴퓨터 후드 아래, 41 00:02:08,259 --> 00:02:09,639 실제로 이해한다. 42 00:02:09,639 --> 00:02:14,930 >> 마지막으로, 조립은 언어를 걸립니다 우리가 있었다는 것을 0과 1로 43 00:02:14,930 --> 00:02:16,190 지금까지 설명. 44 00:02:16,190 --> 00:02:19,270 그리고 정말 마지막으로, 소위 거기 단계를 연결, 어떤 우리가 거 45 00:02:19,270 --> 00:02:22,360 결합 잠시,에서 볼 여러분의 0과 0으로 사람과 46 00:02:22,360 --> 00:02:24,870 전에 사람 다른 사람 당신이 만들었습니다. 47 00:02:24,870 --> 00:02:26,660 >> 그래서 매우 간단한 프로그램을 고려하십시오. 48 00:02:26,660 --> 00:02:27,560 그것은 1 주에서였다. 49 00:02:27,560 --> 00:02:29,610 다만, Hello World를 말했다, 화면에. 50 00:02:29,610 --> 00:02:30,920 우리는 연타를 통해이 달렸다. 51 00:02:30,920 --> 00:02:33,200 또는 우리는 그것을 통해 확인 실행 이는 연타를 달렸다. 52 00:02:33,200 --> 00:02:36,170 그리고 시간 출력 위치 약간의 0과 1. 53 00:02:36,170 --> 00:02:38,100 거기 밖으로하지만 변 중간 단계. 54 00:02:38,100 --> 00:02:40,460 여기에 가면 - 죄송합니다,하지 않았다 아직 그를보고 싶어요. 55 00:02:40,460 --> 00:02:44,800 내 장비에 여기에 가면 나는 hello.c의, 여기 열어 56 00:02:44,800 --> 00:02:46,160 같은 프로그램입니다. 57 00:02:46,160 --> 00:02:48,600 그리고 내가 내 터미널에서 할거야 여기에 윈도우가 나는 갈거야 있습니다 58 00:02:48,600 --> 00:02:51,430 , 연타를 실행하기보다는 확인하는 의 네 가지를 자동화 59 00:02:51,430 --> 00:02:52,870 우리 그 단계. 60 00:02:52,870 --> 00:02:58,620 그리고 연타-S를 할 건데 입력 한 후 hello.c를하고. 61 00:02:58,620 --> 00:03:00,590 >> 그리고 깜박이는 프롬프트가 다시, 이것은 좋은 것입니다. 62 00:03:00,590 --> 00:03:05,280 그리고 지금 큰 창에서, 여기의 gedit를 열고거야. 63 00:03:05,280 --> 00:03:09,610 그리고 그 파일을 열거야 밝혀 hello.s에게이라고합니다 64 00:03:09,610 --> 00:03:11,870 해당 어셈블리 언어를 포함 아까 언급. 65 00:03:11,870 --> 00:03:15,060 이 어셈블리라는거야 언어를 매우 낮은 수준 66 00:03:15,060 --> 00:03:18,470 지시 당신의 인텔 CPU 또는 무엇이든 그것은 내부의 즉 67 00:03:18,470 --> 00:03:19,350 이해한다. 68 00:03:19,350 --> 00:03:24,480 그리고 운동은 움직임입니다. 호출입니다 , 매우 낮은 수준 함수를 호출. 69 00:03:24,480 --> 00:03:26,380 서브 빼기위한 것입니다. 70 00:03:26,380 --> 00:03:30,370 >> 당신은 내부에 특정 CPU가 그렇게 할 때 귀하의 컴퓨터에서, 무엇을 만든다 71 00:03:30,370 --> 00:03:34,300 에 별개 대 다른 CPU를 시장되는 지시 해 72 00:03:34,300 --> 00:03:39,460 이해하고 종종 어떻게 효율적으로 해 그것은 어떤을 실행에 얼마나 빠르게이며, 73 00:03:39,460 --> 00:03:40,380 이러한 지침. 74 00:03:40,380 --> 00:03:45,150 지금이에 대한 자세한 내용은, 당신은 걸릴 수 있습니다 대학에서 다음 가을 CS61. 75 00:03:45,150 --> 00:03:48,170 그러나 여기에서 우리는 몇 가지, 예를 들어,이 잘 보일 수 있습니다 식별자. 76 00:03:48,170 --> 00:03:50,150 hello.c를 프로그램의 이름입니다. 77 00:03:50,150 --> 00:03:51,070 >> . 텍스트 - 78 00:03:51,070 --> 00:03:54,190 그 정도는 거기 아니다 지금, 기억하는 텍스트 79 00:03:54,190 --> 00:03:59,190 여기서의 세그먼트는, 월요일로입니다 메모리는 프로그램이 실제로 끝납니다. 80 00:03:59,190 --> 00:04:01,330 그래서 적어도 막연의 이 익숙한. 81 00:04:01,330 --> 00:04:03,730 여기에 물론, 언급하다 우리의 주요 기능. 82 00:04:03,730 --> 00:04:07,220 아래로 스크롤, 이러한 것들을 참조 라는 레지스터의 아주 작은 덩어​​리 83 00:04:07,220 --> 00:04:09,190 실제 CPU의 메모리 내부. 84 00:04:09,190 --> 00:04:12,930 그리고 난 아래로 스크롤하면 또한, 나는 어떤 종류의를 참조하십시오 85 00:04:12,930 --> 00:04:14,240 ASCII의 간접적 인 언급. 86 00:04:14,240 --> 00:04:17,120 그리고 실제로, 해당 문자열이 있습니다 안녕하세요, 쉼표 세계. 87 00:04:17,120 --> 00:04:20,079 >> 그래서 긴 이야기 짧은이되었습니다 자동으로 당신을 위해 발생 88 00:04:20,079 --> 00:04:22,140 후드 아래에이 모든 시간. 89 00:04:22,140 --> 00:04:26,450 그리고 어떤 일이 있었 정말 한 번입니다 당신은 연타를 실행하거나의 방법으로 한 90 00:04:26,450 --> 00:04:29,150 , 먼저 받고있어, 확인 소스 코드에서, 91 00:04:29,150 --> 00:04:30,700 어셈블리 언어 소위. 92 00:04:30,700 --> 00:04:35,210 다음 연타이 어셈블리로 변환합니다 아래로 0과 1로 언어입니다. 93 00:04:35,210 --> 00:04:38,340 그리고 이것은 우리가 시작하는 슬라이드입니다 에 주 0에서 논의 - 94 00:04:38,340 --> 00:04:39,840 다음에 주 1. 95 00:04:39,840 --> 00:04:44,030 그리고 마지막으로, 이러한 0과 1 0과 1로 결합 96 00:04:44,030 --> 00:04:47,190 이러한 라이브러리에서 우리가 받고 있어요 표준 I / O 나처럼 부여 97 00:04:47,190 --> 00:04:50,010 문자열 라이브러리 또는 CS50 라이브러리입니다. 98 00:04:50,010 --> 00:04:54,200 >> 그래서 더이 그림을 그릴 시각적으로, 우리는 hello.c의가 있습니다. 99 00:04:54,200 --> 00:04:57,220 그리고 물론, printf를 사용 안녕하세요 세계, 말을 작동합니다. 100 00:04:57,220 --> 00:05:01,810 컴파일 단계에 내려 간다 해당 파일 우리는 단지 심지어 hello.s를 보았다 101 00:05:01,810 --> 00:05:04,290 일반적으로 삭제됩니다 그 생각 자동으로. 102 00:05:04,290 --> 00:05:06,050 하지만 그 어셈블리 코드의 중간 단계에있다. 103 00:05:06,050 --> 00:05:09,750 그리고, 우리는 어셈블리를 조립하는 경우 때 언어는, 말하자면, 그건 104 00:05:09,750 --> 00:05:10,830 이러한 0과 1을 얻는다. 105 00:05:10,830 --> 00:05:13,920 그래서 우리는에 오늘 효율적으로 확대 한 무엇을 당연한 우리가 복용 한 것은, 106 00:05:13,920 --> 00:05:16,430 소스 코드를가는 방법 개체 코드. 107 00:05:16,430 --> 00:05:18,850 >> 하지만 마지막으로, 지금 같은 그림 - 그것을 통해에 밀어하자 108 00:05:18,850 --> 00:05:20,020 왼쪽. 109 00:05:20,020 --> 00:05:22,880 그리고 참고 상단에가 나는 stdio.h에 언급. 110 00:05:22,880 --> 00:05:25,030 그것은 우리가 포함했던 파일의 거의 모든의의 111 00:05:25,030 --> 00:05:26,250 우리가 작성한 프로그램. 112 00:05:26,250 --> 00:05:28,830 그리고 그 내용이 파일의 복사 붙여 넣기 얻을, 113 00:05:28,830 --> 00:05:30,350 효과적으로 코드 꼭대기. 114 00:05:30,350 --> 00:05:34,170 그러나 그것은 즉, 컴퓨터에서 밝혀 시스템 어딘가에 아마 거기 115 00:05:34,170 --> 00:05:39,150 누군가 년 쓴 stdio.c 파일 전 그 모두 구현 116 00:05:39,150 --> 00:05:41,870 선언 된 기능 stdio.h에있다. 117 00:05:41,870 --> 00:05:45,465 >> 지금 현실에서 그것은에 아마의 심지어 당신의 Mac 또는 PC를 118 00:05:45,465 --> 00:05:47,660 CS50 어플라이언스는 원시 C 코드입니다. 119 00:05:47,660 --> 00:05:52,710 누군가가 이미 그것을 컴파일 및 포함 . 오 오브젝트 코드 파일이나. 120 00:05:52,710 --> 00:05:56,020 공유 라이브러리를 참조 파일 그는 미리 설치되어있어 121 00:05:56,020 --> 00:05:57,240 당신을 위해 미리 컴파일. 122 00:05:57,240 --> 00:06:01,950 그러나 실제로 존재한다고 가정 병렬로 우리의 컴퓨터 stdio.c에 123 00:06:01,950 --> 00:06:02,650 연타로. 124 00:06:02,650 --> 00:06:04,960 귀하의 코드는 컴파일되는 것 및 조립. 125 00:06:04,960 --> 00:06:09,200 stdio.c의 코드는 컴파일되고 조립, 그래서 이것은 매우 마지막으로 그 126 00:06:09,200 --> 00:06:13,730 여기까지, 단계, 우리는 어떻게 든해야만 링크 말하자면, 당신의 0과 1 127 00:06:13,730 --> 00:06:18,430 하나에 자신의 0과 1로 궁극적으로 간단한 프로그램 128 00:06:18,430 --> 00:06:20,540 안녕하세요 방금 전화. 129 00:06:20,540 --> 00:06:23,340 >> 그래서 그건 마법의 전부 지금까지 일어나고. 130 00:06:23,340 --> 00:06:26,430 그리고이를 취할 것 에 대한 프로세스를 부여하지만, 실현 131 00:06:26,430 --> 00:06:28,750 수분이 많은 세부 사항이있다 이 아래에있는 것. 132 00:06:28,750 --> 00:06:31,920 그리고이 만드는 것입니다 귀하의 인텔 내부 컴퓨터 133 00:06:31,920 --> 00:06:33,940 특히 독특한. 134 00:06:33,940 --> 00:06:37,020 >> 그래서 메모, 당신이 좋아 한 경우에 이번 주 금요일 점심에 우리와 함께 가야 할 135 00:06:37,020 --> 00:06:41,570 일반적인 장소 cs50.net/rsvp에, 오후 1시 15분 이번 주 금요일. 136 00:06:41,570 --> 00:06:43,400 지금은 몇 가지 공지 사항. 137 00:06:43,400 --> 00:06:44,670 그래서 우리는 몇 가지 좋은 소식이있다. 138 00:06:44,670 --> 00:06:45,970 그리고 우리는 나쁜 소식이있다. 139 00:06:45,970 --> 00:06:47,260 여기에 몇 가지 좋은 소식으로 시작합니다. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [신음 소리]를 142 00:06:54,510 --> 00:06:54,710 >> 좋아. 143 00:06:54,710 --> 00:06:56,670 음, 그래서 기술적 휴일의 그것은 순전히 저희에게서 선물이 아니다. 144 00:06:56,670 --> 00:06:58,030 물론 그런데 나쁜 소식. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [신음 소리]를 147 00:07:01,880 --> 00:07:03,530 >> 나는 많은 시간을 보냈다 이 애니메이션에. 148 00:07:03,530 --> 00:07:04,690 >> [웃음] 149 00:07:04,690 --> 00:07:07,000 >> 리뷰 세션이있을 것 이 월요일오고. 150 00:07:07,000 --> 00:07:08,340 그것은 오후 5:30에있을거야. 151 00:07:08,340 --> 00:07:11,210 우리는 모든 세부 사항을 당신을 생각 나게합니다 코스의에 이메일을 통해 152 00:07:11,210 --> 00:07:13,470 일 시간의 단지 몇 웹 사이트. 153 00:07:13,470 --> 00:07:16,610 그것은 촬영과 제공 될 것입니다 잠시 후. 154 00:07:16,610 --> 00:07:19,200 당신이 만들 수없는 경우에 그 월요일 밤 슬롯, 걱정하지 마십시오. 155 00:07:19,200 --> 00:07:22,270 섹션이 오는 주는 것 퀴즈에 대한 검토에 초점을 맞 춥니 다. 156 00:07:22,270 --> 00:07:25,670 귀하의 섹션은 월요일에있을 경우 실제로 대학 공휴일, 우리가 ... 157 00:07:25,670 --> 00:07:26,920 여전히 절에서 만난다. 158 00:07:26,920 --> 00:07:28,890 당신은 단순히 그렇게 할 수없는 경우 섹션 거 야 때문에 159 00:07:28,890 --> 00:07:29,860 멀리, 저 괜찮아요. 160 00:07:29,860 --> 00:07:33,710 일요일 또는 화요일 섹션이나 참석 제이슨의 섹션 튜닝에서, 어느 것 161 00:07:33,710 --> 00:07:35,110 온라인. 162 00:07:35,110 --> 00:07:37,490 >> 그래서, 더 나쁜 소식. 163 00:07:37,490 --> 00:07:41,960 따라서 교과에 따라, 우리는 다음 주 금요일 강의가 있습니다. 164 00:07:41,960 --> 00:07:43,690 하지만 좋은 소식 - 165 00:07:43,690 --> 00:07:44,860 분명히,이에 너무 많은 시간을 보냈다. 166 00:07:44,860 --> 00:07:45,280 >> [웃음] 167 00:07:45,280 --> 00:07:47,140 >> 우리는 금요일 강의 다음주 취소 할 것이다. 168 00:07:47,140 --> 00:07:50,590 그래서 우리를위한 선물이 될 것이다, 그래서 당신 정말 좋은 휴식에있을 수 있습니다 169 00:07:50,590 --> 00:07:52,990 이번 주에 따라서 이주 사이. 170 00:07:52,990 --> 00:07:57,460 없이 강의를 다음 주, 단지 작은 그래서 당신이해야하는 약간의 퀴즈 171 00:07:57,460 --> 00:07:59,030 점점 흥분. 172 00:07:59,030 --> 00:08:03,870 >> 그럼 이제 우리의 관심을 돌려 보자 실제로 시각적 인 무언가 173 00:08:03,870 --> 00:08:06,990 더 흥미로운 무대를 설정 수평선에있을거야 무엇을 위해 174 00:08:06,990 --> 00:08:08,420 주 시간이 단지 몇한다. 175 00:08:08,420 --> 00:08:12,160 첫 번째 퀴즈 후, 우리는 회전합니다 우리의 문제 세트의 또 다른 초점 176 00:08:12,160 --> 00:08:16,710 특정 도메인 문제, 그 더 일반적으로 수사 또는 보안. 177 00:08:16,710 --> 00:08:19,550 >> 이 문제와 사실, 전통 세트는 나를 위해 중 하나입니다 178 00:08:19,550 --> 00:08:24,850 활보하는 동료 또는 CA를 가르치는 몇 가지 사진을 찍는 캠퍼스 179 00:08:24,850 --> 00:08:29,450 식별하지만 비 명백한 사람 다음 장소 또는 물건, 매년 I 180 00:08:29,450 --> 00:08:34,520 어떻게 든 실수로 삭제 관리 또는 디지털 미디어 카드가 손상 181 00:08:34,520 --> 00:08:35,720 그것은 우리 카메라의 내부입니다. 182 00:08:35,720 --> 00:08:36,860 하지만 큰 문제. 183 00:08:36,860 --> 00:08:39,200 내가 가서 연결할 수 있습니다 내 컴퓨터로합니다. 184 00:08:39,200 --> 00:08:43,010 나는 그래서 그것의 법정 이미지를 만들 수 있습니다 0을 복사하여, 말하고하는 185 00:08:43,010 --> 00:08:46,830 그 메모리 카드의 것들 해제 여부 는 SD 카드 나 컴팩트 플래시 카드 186 00:08:46,830 --> 00:08:48,100 당신은에 익숙 뭐든간에. 187 00:08:48,100 --> 00:08:49,300 그리고 우리는 밖으로 손 수 있습니다. 188 00:08:49,300 --> 00:08:53,190 >> 그리고 다른 사이에 앞으로 도전 당신을위한 일들이 작성하는 것 189 00:08:53,190 --> 00:08:58,630 의 전체 무리를 복구 C 코드 나를 위해 JPEG 파일과 공개가 될 것입니다 190 00:08:58,630 --> 00:09:00,190 사람, 장소 또는 물건. 191 00:09:00,190 --> 00:09:03,340 우리는 또한이 문제에 얘기하자 설정하고 일에 대해, 올 192 00:09:03,340 --> 00:09:04,440 더 일반적으로 그래픽. 193 00:09:04,440 --> 00:09:06,140 우리는, 물론 그들을 사용했습니다 탈출합니다. 194 00:09:06,140 --> 00:09:09,080 당연하지만 당신은 일종의 촬영했습니다 이러한 높은 수준의 개념이 존재 195 00:09:09,080 --> 00:09:10,680 사각형 및 타원형의. 196 00:09:10,680 --> 00:09:12,450 하지만 후드 아래에 픽셀이 있습니다. 197 00:09:12,450 --> 00:09:14,370 그리고 당신은 시작해야했습니다 그 생각. 198 00:09:14,370 --> 00:09:18,800 또는 당신은 P-4 세트 생각해야합니다에 대한 귀하의 벽돌 사이의 차이에 대해 어떻게 199 00:09:18,800 --> 00:09:21,990 빨리 당신이 공을 가로 질러 이동하고 의 화면 탈옥. 200 00:09:21,990 --> 00:09:24,830 따라서이 개념은있다 의 화면에 점 201 00:09:24,830 --> 00:09:26,290 이미 재생에 와서. 202 00:09:26,290 --> 00:09:29,430 >> 지금 당신이 보는 무슨은하지만, 무엇 당신은 컴퓨터 화면에 얻을. 203 00:09:29,430 --> 00:09:33,680 당신은 좋은 또는 시청 한 경우 나쁜 TV는 확률은 꽤 많이 있습니다 204 00:09:33,680 --> 00:09:36,280 technophobes 같은 청중을 치료 사람 정말 싫어요 205 00:09:36,280 --> 00:09:37,630 많은 컴퓨팅에 대해 알고있다. 206 00:09:37,630 --> 00:09:40,840 그리고 그것은 경찰 아주 쉽다 말할 형사, 당신은 할 수 있습니다 207 00:09:40,840 --> 00:09:41,710 나를 위해 그 업을 청소? 208 00:09:41,710 --> 00:09:42,710 또는 오른쪽으로 향상? 209 00:09:42,710 --> 00:09:45,550 강화는에서 버즈 단어처럼 대부분의 모든 범죄 관련 보여줍니다. 210 00:09:45,550 --> 00:09:49,240 당신은 아주 가지고가는 경우와 현실은 하는 의심의 흐릿한 사진 211 00:09:49,240 --> 00:09:51,620 뭔가 나쁜, 당신은 할 수 없습니다 다만 그것을 향상시킬 수 있습니다. 212 00:09:51,620 --> 00:09:53,080 당신이 무한히 확대 할 수 없습니다. 213 00:09:53,080 --> 00:09:56,350 당신은 누군가의의 반짝임에서 볼 수 없습니다 그 노력의 눈 214 00:09:56,350 --> 00:09:59,860 에도 불구하고 특정 범죄, TV에서 본의 보급. 215 00:09:59,860 --> 00:10:04,110 >> 그리고 그의 동기를 부여하자로하는 곧 문제에서 엿볼으로 설정 216 00:10:04,110 --> 00:10:05,765 일부 방송되는 당신 잘 될 수 있습니다. 217 00:10:05,765 --> 00:10:06,500 >> [동영상 재생] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 자, 당신에서 좋은 모습을하자. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> 해를 누릅니다. 222 00:10:17,766 --> 00:10:18,658 그 다시 실행합니다. 223 00:10:18,658 --> 00:10:19,550 >> 분을 기다립니다. 224 00:10:19,550 --> 00:10:21,580 오른쪽으로 이동합니다. 225 00:10:21,580 --> 00:10:21,800 >> -가. 226 00:10:21,800 --> 00:10:22,690 그 고정. 227 00:10:22,690 --> 00:10:23,692 >> 화면 전체를 선택합니다. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 그 고정. 230 00:10:24,154 --> 00:10:25,140 >> 나중에 그에 대한 것까지 조입니다? 231 00:10:25,140 --> 00:10:27,090 >> 그 사람에에 - 벡터 다시 휠 있습니다. 232 00:10:27,090 --> 00:10:29,730 >> 이 자리에서 바로 여기에 급상승한다. 233 00:10:29,730 --> 00:10:33,700 >> -와 오른쪽 장비, 군데 확대 날카롭게 할 수 있습니다. 234 00:10:33,700 --> 00:10:34,490 >> - 뭐라 구요? 235 00:10:34,490 --> 00:10:35,870 >> - 그것은 향상 프로그램입니다. 236 00:10:35,870 --> 00:10:36,793 >> - 수 당신은 어떤쪽으로 그 선택을 취소합니다? 237 00:10:36,793 --> 00:10:38,560 >> - 나도 몰라. 238 00:10:38,560 --> 00:10:39,090 의 그것을 향상시킬 수 있습니다. 239 00:10:39,090 --> 00:10:41,690 >> 섹션 A-6을 향상시킬 수 있습니다. 240 00:10:41,690 --> 00:10:43,510 >> -I는 세부 사항을 강화하고 - 241 00:10:43,510 --> 00:10:44,456 >> -I 확대 할 수있을 것 같아요. 242 00:10:44,456 --> 00:10:45,402 내 화면에 놓습니다. 243 00:10:45,402 --> 00:10:47,300 >> 그녀의 눈에서 반사를 향상시킬 수 있습니다. 244 00:10:47,300 --> 00:10:49,330 >> 의이 통해 실행-합시다 비디오 향상. 245 00:10:49,330 --> 00:10:50,340 >> - 에드거, 당신이 향상시킬 수 있습니다? 246 00:10:50,340 --> 00:10:52,320 >> - 잠깐만. 247 00:10:52,320 --> 00:10:54,290 >> - 난이 반영에 노력하고. 248 00:10:54,290 --> 00:10:55,560 >> - 누군가의 반사. 249 00:10:55,560 --> 00:10:56,440 >> 반사. 250 00:10:56,440 --> 00:10:57,940 >> 반사 -있다 남자의 얼굴. 251 00:10:57,940 --> 00:10:58,860 >> - 반사. 252 00:10:58,860 --> 00:10:59,710 >> -이 반사입니다. 253 00:10:59,710 --> 00:11:00,900 >> 거울에있는 줌. 254 00:11:00,900 --> 00:11:03,500 >> - 당신은 반사를 볼 수 있습니다. 255 00:11:03,500 --> 00:11:04,700 >> -CAN 여기에서 이미지를 향상? 256 00:11:04,700 --> 00:11:05,700 >> - 수 당신이 바로 여기에 그를 향상? 257 00:11:05,700 --> 00:11:06,500 >> - 수 당신은 그것을 개선? 258 00:11:06,500 --> 00:11:07,380 >> - 수 당신은 그것을 개선? 259 00:11:07,380 --> 00:11:08,190 >> - 할 수있다 우리는이 향상? 260 00:11:08,190 --> 00:11:08,940 >> - 수 당신은 그것을 개선? 261 00:11:08,940 --> 00:11:10,280 >> 두 번째에 - 잠깐, 향상됩니다. 262 00:11:10,280 --> 00:11:11,570 >> 문에 줌. 263 00:11:11,570 --> 00:11:12,180 >> - 10 배. 264 00:11:12,180 --> 00:11:13,052 >> - 줌. 265 00:11:13,052 --> 00:11:13,197 >> [웃음] 266 00:11:13,197 --> 00:11:14,360 >> 인치 - 이동 267 00:11:14,360 --> 00:11:15,100 >> 중지 - 기다립니다. 268 00:11:15,100 --> 00:11:15,740 >> - 중지합니다. 269 00:11:15,740 --> 00:11:16,290 >> 를 - 일시 중지. 270 00:11:16,290 --> 00:11:19,390 >> 주위에 75도를 회전 수직하시기 바랍니다. 271 00:11:19,390 --> 00:11:19,886 >> [웃음] 272 00:11:19,886 --> 00:11:24,350 >> 부분에 백 중지 및 문에 대해 다시. 273 00:11:24,350 --> 00:11:26,330 >> 이미지 보정기를 얻었다 즉, 비트 맵 수 있습니까? 274 00:11:26,330 --> 00:11:28,990 >> - 어쩌면 우리는 Pradeep 센 사용할 수 있습니다 방법은 Windows에 볼 수 있습니다. 275 00:11:28,990 --> 00:11:30,680 >> -이 소프트웨어는 예술의 상태입니다. 276 00:11:30,680 --> 00:11:31,676 >> - 아이콘은 OFF입니다. 277 00:11:31,676 --> 00:11:34,166 >> -와 적절한 조합 알고리즘. 278 00:11:34,166 --> 00:11:38,399 >> - 그는에 조명 알고리즘을 가지고있어 다음 단계 나는 그들을 사용할 수 있습니다 279 00:11:38,399 --> 00:11:38,648 이 사진을 향상시킬 수 있습니다. 280 00:11:38,648 --> 00:11:42,050 >> 에 - 잠금 및 z 축 확대. 281 00:11:42,050 --> 00:11:42,760 >> - 강화. 282 00:11:42,760 --> 00:11:43,060 >> - 강화. 283 00:11:43,060 --> 00:11:43,760 >> - 강화. 284 00:11:43,760 --> 00:11:45,010 >> 동결 강화. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END 동영상 재생] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. 마란 : 그래서 문제 세트 5가 앞에 놓인 것입니다. 288 00:11:51,470 --> 00:11:55,260 그래서 우리는 곧 더 나은 이해를 얻을 것이다 언제 그리고 왜 당신이 할 수의 289 00:11:55,260 --> 00:11:57,300 우리는 그런 식으로 개선 할 수 없습니다. 290 00:11:57,300 --> 00:12:00,090 하지만 먼저,의는 우리의 관심을 돌려 보자 우리가 거​​의 빌딩 블록 중 일부 291 00:12:00,090 --> 00:12:02,250 그 이야기를 할 수 있어야합니다. 292 00:12:02,250 --> 00:12:05,580 >> 그래서 우리는이 그림을 그린 것을 기억 월요일 조금 지난 주. 293 00:12:05,580 --> 00:12:09,970 그리고 이것은 사물의 레이아웃을 설명 컴퓨터의 메모리에있는 경우 294 00:12:09,970 --> 00:12:11,000 어떤 프로그램을 실행할 수 있습니다. 295 00:12:11,000 --> 00:12:14,310 맨 위로 기술 분야, 리콜, 의미 실제 0과 1로 296 00:12:14,310 --> 00:12:16,000 그 프로그램을 구성합니다. 297 00:12:16,000 --> 00:12:19,340 거기에, 그 아래의 몇 가지 초기화 또는 초기화되지 않은 데이터, 이는 일반적으로 298 00:12:19,340 --> 00:12:22,910 또는 상수 같은 것들을 의미합니다 문자열이나가 전역 변수 299 00:12:22,910 --> 00:12:24,200 미리 선언. 300 00:12:24,200 --> 00:12:26,500 이 힙하지만 우리는 올 것이다 다시 비트에서 해당합니다. 301 00:12:26,500 --> 00:12:27,410 >> 그리고 스택이있다. 302 00:12:27,410 --> 00:12:30,660 대부분의 트레이 스택처럼 메모리 가져 곳에 식당이 있습니다 303 00:12:30,660 --> 00:12:33,610 계층화 때마다 계층화 당신이 프로그램에서 무엇을합니까? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 에 대한 스택 사용은 무엇입니까? 306 00:12:37,730 --> 00:12:39,320 >> 그래? 307 00:12:39,320 --> 00:12:40,000 >> 함수 호출합니다. 308 00:12:40,000 --> 00:12:42,890 당신이 함수를 호출 할 때마다, 그것은의 그것의 메모리 짜 개진 조각에 주어진 309 00:12:42,890 --> 00:12:45,020 지역 변수 또는 매개 변수입니다. 310 00:12:45,020 --> 00:12:48,810 그리고 그림으로, 우리가 볼 수있는 각각 경우 연속 함수 호출 311 00:12:48,810 --> 00:12:52,520 전화 B 전화 C 호출 D, 그들은 스택에 계층화됩니다. 312 00:12:52,520 --> 00:12:55,630 그리고 그 조각의 각 내 메모리는 기본적으로 고유 한 범위입니다 313 00:12:55,630 --> 00:12:58,590 해당 기능의, 어떤, 물론, 당신이 손하려는 경우 문제가 314 00:12:58,590 --> 00:13:01,850 하나의 함수에서 다른 부분에 당신이 그것을 할 데이터의 315 00:13:01,850 --> 00:13:03,500 변형 또는 변경할 수 있습니다. 316 00:13:03,500 --> 00:13:08,060 >> 그래서 사용에 대한 우리의 해결책은 무엇 이었습니까 하나의 스택으로 표현하는 기능 317 00:13:08,060 --> 00:13:11,390 내부 메모리를 변경하는 프레임 다른 스택 프레임? 318 00:13:11,390 --> 00:13:14,590 어떻게 다른 두 이야기를합니까? 319 00:13:14,590 --> 00:13:18,510 그래서 포인터 또는 주소의 방법으로, 어디의 어떤, 다시, 단지 설명 320 00:13:18,510 --> 00:13:22,280 특정의 메모리에 의한 방법 바이트 수, 특정 321 00:13:22,280 --> 00:13:23,830 값을 찾을 수 있습니다. 322 00:13:23,830 --> 00:13:26,860 그래서도 우리는 계속 지난 시간을 기억 에서 이야기를 보았다 323 00:13:26,860 --> 00:13:28,280 상당히 버그 프로그램입니다. 324 00:13:28,280 --> 00:13:32,900 이 프로그램은 몇 가지에 대한 버그가 이유가 있지만, 가장 우려 하나입니다 325 00:13:32,900 --> 00:13:34,620 그것은 무엇을 확인하지 못하기 때문에? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> 그래, 입력을 확인하는 데 실패합니다. 328 00:13:40,450 --> 00:13:41,870 네? 329 00:13:41,870 --> 00:13:43,880 >> 그것은 12 자보다 더합니다. 330 00:13:43,880 --> 00:13:47,260 그래서 매우 세련되게, memcopy를 호출 할 때, 어느 이름에서 알 수 있듯이, 단지 331 00:13:47,260 --> 00:13:50,630 두 번째 인수의 복사본을 메모리 첫 번째 인수로. 332 00:13:50,630 --> 00:13:54,730 세 번째 인수는 매우 똑똑하다 당신이하지 않도록하기 위해 검사 333 00:13:54,730 --> 00:13:59,400 이 경우, 길이 이상 복사 바, 문자 수, 334 00:13:59,400 --> 00:14:03,810 대상으로, 어떤이입니다 배열 C. 그러나 문제는 그 무엇 335 00:14:03,810 --> 00:14:07,230 C 자체가 충분히 크지 않은 경우 그 처리하려면? 336 00:14:07,230 --> 00:14:09,900 당신의 번호를 복사하는거야 당신이 주어 졌어 바이트 수. 337 00:14:09,900 --> 00:14:13,040 하지만 실제로는 더 무엇을해야합니까 당신이 공간을 가지고보다 바이트? 338 00:14:13,040 --> 00:14:16,770 >> 음,이 프로그램을 매우 어리석게 단지 맹목적 그건 어떤 걸릴 진행 339 00:14:16,770 --> 00:14:20,650 주어진 안녕하세요 백 슬래시 0입니다 문자열은 짧은 큰 경우 340 00:14:20,650 --> 00:14:22,040 충분히 다섯 문자처럼. 341 00:14:22,040 --> 00:14:26,470 하지만 실제로 12 문자의 경우, 또는 1,200 자, 우리는 지난 시간에 본 342 00:14:26,470 --> 00:14:29,380 당신은 완전히에가는 걸 메모리 덮어 쓰기 343 00:14:29,380 --> 00:14:30,470 당신에 속하지 않습니다. 344 00:14:30,470 --> 00:14:34,390 그리고 최악의 경우, 당신은 덮어 쓸 경우 그 우리 불리는이 붉은 부분 345 00:14:34,390 --> 00:14:35,380 주소를 반환 - 346 00:14:35,380 --> 00:14:38,370 이 단지 여기서 컴퓨터 자동으로 당신을 위해, 뒤에 347 00:14:38,370 --> 00:14:43,130 거리 장면, 정력 32 비트 값입니다 정상적으로 어떤 주소로 상기 348 00:14:43,130 --> 00:14:47,080 돌아 왔을 때 foo는,이 다른 기능, 실행 완료됩니다. 349 00:14:47,080 --> 00:14:49,320 그것은 종류의 빵 부스러기의 어떤 그것을 반환합니다. 350 00:14:49,320 --> 00:14:52,490 당신은 잠재적으로 그렇게 덮어 쓰면 당신이 나쁜 사람이라면, 할 수 있었다 351 00:14:52,490 --> 00:14:54,750 잠재적 인수 다른 사람의 컴퓨터. 352 00:14:54,750 --> 00:14:58,020 그리고 당신은 가장 확실거야 대부분의 경우에 충돌이 발생합니다. 353 00:14:58,020 --> 00:15:01,690 >> 이제이 문제는 더욱 악화되었다 우리는 메모리에 대해 말하기 시작으로 354 00:15:01,690 --> 00:15:03,010 더 일반적으로 관리 할 수​​ 있습니다. 355 00:15:03,010 --> 00:15:07,150 그리고 malloc에​​는 메모리 할당입니다 우리가 할당하는 데 사용할 수있는 기능 356 00:15:07,150 --> 00:15:11,260 우리가 사전에 모르는 메모리 우리는 몇 가지해야 할 수도. 357 00:15:11,260 --> 00:15:13,960 그래서, 예를 들어, 내가 다시 가면 여기에서 장비에. 358 00:15:13,960 --> 00:15:21,010 그리고, 마지막으로 hello2.c에서 열어 보고 여기에이 프로그램을 호출 359 00:15:21,010 --> 00:15:23,500 이 같은 작은 선물, 단지 세 줄 - 360 00:15:23,500 --> 00:15:27,940 귀하의 이름, 다음 문자열 이름을, 주 왼쪽에 getString는 같습니다. 361 00:15:27,940 --> 00:15:29,690 그리고 우리는 그것을 밖으로 인쇄 사용자의 이름을 입력합니다. 362 00:15:29,690 --> 00:15:31,170 >> 그래서 이것은 매우 간단한 프로그램이다. 363 00:15:31,170 --> 00:15:34,870 명확하게, 내가 앞서 가자 여보세요 - 2합니다. 364 00:15:34,870 --> 00:15:36,680 나는 점 슬래시 안녕하세요-2를 할거야. 365 00:15:36,680 --> 00:15:37,750 당신의 이름을 명시 - 366 00:15:37,750 --> 00:15:38,140 데이비드. 367 00:15:38,140 --> 00:15:38,840 입력합니다. 368 00:15:38,840 --> 00:15:39,540 데이비드 안녕하세요. 369 00:15:39,540 --> 00:15:41,060 그것은 확인을 작동하는 것 같다. 370 00:15:41,060 --> 00:15:43,140 그러나 실제로 일어나고 여기에 후드 아래? 371 00:15:43,140 --> 00:15:44,670 먼저하자 일부 계층 뒤로 껍질. 372 00:15:44,670 --> 00:15:48,380 문자열은 우리가했습니다 그냥 동의어입니다 무엇을 실현? 373 00:15:48,380 --> 00:15:49,110 문자 스타. 374 00:15:49,110 --> 00:15:52,740 그럼이 좀 더 난해하게하자 하지만 더 기술적으로 정확이 그 375 00:15:52,740 --> 00:15:55,570 것을 의미 문자 스타입니다 이름, 예, 변수이다. 376 00:15:55,570 --> 00:15:59,920 하지만 이름을 저장하는의 주소입니다 조금 이상한 느낌 문자, 377 00:15:59,920 --> 00:16:01,050 내가 문자열을 다시 받고 있어요 때문이다. 378 00:16:01,050 --> 00:16:03,580 난 다시 여러 개의 받고 있어요 문자 문자 수 없습니다. 379 00:16:03,580 --> 00:16:07,400 >> 물론, 당신은 첫 번째 필요 기억하는 문자의 주소 위치 380 00:16:07,400 --> 00:16:08,870 때문에 이유는 전체 문자열은? 381 00:16:08,870 --> 00:16:12,700 당신은 어떻게 알아낼 않는 곳의 끝 문자열의 시작을 알고있다? 382 00:16:12,700 --> 00:16:13,630 백 슬래시 제로. 383 00:16:13,630 --> 00:16:17,260 그래서 그 두 가지 단서가 파악 시작과 끝 전 384 00:16:17,260 --> 00:16:20,280 모든 문자열들이있어 너무 오래 같이있다 제대로이 널 (null)로 형성 385 00:16:20,280 --> 00:16:22,110 터미네이터, 그 역 슬래쉬 제로. 386 00:16:22,110 --> 00:16:24,520 >> 하지만이 getString에 호출된다. 387 00:16:24,520 --> 00:16:28,020 그리고 그 getString는 밝혀 지 모든 시간은 종류의되었습니다 388 00:16:28,020 --> 00:16:28,820 우리를 위해 속임수. 389 00:16:28,820 --> 00:16:32,460 그것은 확실하게이 노동을하고있어 사용자로부터 문자열을 받고. 390 00:16:32,460 --> 00:16:34,580 하지만 그 기억은 어디에 에서오고? 391 00:16:34,580 --> 00:16:38,440 우리는 여기 사진에 돌아가서 경우 단지에서 정의를 적용 392 00:16:38,440 --> 00:16:42,610 순간 전 그 스택은 어디에 함수가 호출 될 때 메모리가 간다 393 00:16:42,610 --> 00:16:45,370 그 논리에 의해, 당신은 getString에 호출 할 때, 그리고 난에 입력 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D 입력, 어디에 D-A-V-I-D 백 슬래시 제로에 따라 저장 395 00:16:50,900 --> 00:16:53,480 이야기 우리는 지금까지 우리에게 말 했어요? 396 00:16:53,480 --> 00:16:55,190 >> 그것은에있을 것 같다 스택, 오른쪽? 397 00:16:55,190 --> 00:16:58,120 당신이 문자열을 호출 할 때 얻을 스택에 메모리의 작은 조각. 398 00:16:58,120 --> 00:17:01,630 그래서 그 D-A-V-I-D 추론하는 서 백 슬래시 제로가 저장됩니다 399 00:17:01,630 --> 00:17:02,770 거기에 스택합니다. 400 00:17:02,770 --> 00:17:07,680 그러나 반환하는 GetString, 잠깐만 해당 문자열은, 말하자면, 의미 401 00:17:07,680 --> 00:17:11,700 그것은 식당에서 트레이의 스택에서 수행됩니다. 402 00:17:11,700 --> 00:17:14,560 그리고 우리는 즉시로 지속 시간을 말했다 함수가 반환, 당신은 걸릴 403 00:17:14,560 --> 00:17:20,109 스택 트레이, 말하자면, 어떤 당신의 나머지에 대해 가정 할 수 404 00:17:20,109 --> 00:17:21,819 그 기억? 405 00:17:21,819 --> 00:17:25,160 나는 일종의 물음표를 redrew 그들은 효과적으로되기 때문에 406 00:17:25,160 --> 00:17:26,250 알 수없는 값입니다. 407 00:17:26,250 --> 00:17:29,500 때 어떤 이들은 재사용 할 수 있습니다 다음 함수가 호출됩니다. 408 00:17:29,500 --> 00:17:31,870 >> 즉, 우리가 발생하는 경우 저장한다 - 409 00:17:31,870 --> 00:17:34,350 나는 빨리 그림을 그릴 수 있습니다 여기에 스택. 410 00:17:34,350 --> 00:17:38,690 우리는 바닥을 그리기 할 일이 있다면 내 메모리 세그먼트, 우리는 말할 것 411 00:17:38,690 --> 00:17:42,230 이 메모리의 장소입니다 메인 어쩌면 인자 C에 의해 점유 412 00:17:42,230 --> 00:17:46,790 인수 v 및 프로그램의 아무것도, getString는이 호출 될 때, 413 00:17:46,790 --> 00:17:51,120 아마도 getString는이옵니다 여기에 메모리의 청크. 414 00:17:51,120 --> 00:17:53,940 그리고 D-A-V-I-D 든 이 함수에서 끝납니다. 415 00:17:53,940 --> 00:17:55,320 그리고 지나치게 단순화거야. 416 00:17:55,320 --> 00:18:00,050 그러나 가정하자의 D-A-V-I-D가 백 슬래시 제로. 417 00:18:00,050 --> 00:18:03,500 그래서 많은 바이트가 사용됩니다 getString에 대한 프레임. 418 00:18:03,500 --> 00:18:08,270 >> 그러나 곧 getString에 반환으로, 우리는 마지막으로 말했다 통해이 메모리 419 00:18:08,270 --> 00:18:11,340 여기 모든이됩니다 - woops! - 420 00:18:11,340 --> 00:18:14,270 모두 효과적으로 삭제됩니다. 421 00:18:14,270 --> 00:18:17,220 그리고 우리는 문제로 지금 생각할 수 부호 알고 있기 때문에 422 00:18:17,220 --> 00:18:18,720 어떻게하는 메모리가 될거야. 423 00:18:18,720 --> 00:18:22,130 실제로, 나는 매우 자주 함수를 호출 getString 나 이외의 다른. 424 00:18:22,130 --> 00:18:24,750 그리고 최대한 빨리 다른 전화로 getString 나보다 기능, 아닐 수도있는 425 00:18:24,750 --> 00:18:28,860 우리가 본이 특정 프로그램 하지만 다른, 확실히 다른시 426 00:18:28,860 --> 00:18:34,180 기능이 주어지고 끝날 수도 스택이 다음 자리. 427 00:18:34,180 --> 00:18:39,410 >> 그래서 그 getString에 저장 될 수 없습니다 스택에 D-A-V-I-D 난 것이기 때문에 428 00:18:39,410 --> 00:18:41,040 즉시 액세스를 잃게됩니다. 429 00:18:41,040 --> 00:18:43,720 그러나 우리는 그들이하는 GetString 알고 것만을 반환? 430 00:18:43,720 --> 00:18:47,220 그것은으로 돌​​아 아니에요 나 6 자합니다. 431 00:18:47,220 --> 00:18:51,090 그것은 진정으로 무엇 않은 반환 우리는 지난 시간에 결론? 432 00:18:51,090 --> 00:18:52,480 첫번째의 주소입니다. 433 00:18:52,480 --> 00:18:56,650 그래서 어떻게 든, 당신은 getString에 전화했을 때, 그것은의 메모리 덩어리를 할당하는 것 434 00:18:56,650 --> 00:18:59,620 문자열이 사용자 유형 및 그것의 다음 반환 주소. 435 00:18:59,620 --> 00:19:02,930 그리고 그것은 당신이 때 당신이 원하는 것이 밝혀 이 메모리를 할당하는 기능 436 00:19:02,930 --> 00:19:08,390 방법과라는 사람에게 반환 그 함수의 주소 437 00:19:08,390 --> 00:19:11,870 메모리의 청크, 당신이 절대적으로 에서 스택에서 그것을 둘 수 없다 438 00:19:11,870 --> 00:19:14,750 바닥 때문에 기능적으로 그냥 매우 당신이되지 것 439 00:19:14,750 --> 00:19:17,800 신속하게, 당신은 아마 추측 할 수있는 우리는 아마 그것을 던져거야 440 00:19:17,800 --> 00:19:20,130 대신, 소위 힙. 441 00:19:20,130 --> 00:19:25,290 >> 그래서 메모리의 하단의 사이 레이아웃과 메모리의의 상단 442 00:19:25,290 --> 00:19:26,820 레이아웃 세그먼트의 전체 무리이다. 443 00:19:26,820 --> 00:19:29,270 하나는 스택이며, 오른쪽 그 위에 힙입니다. 444 00:19:29,270 --> 00:19:33,680 그리고 힙은 서로 다른 덩어리입니다 기능에 사용되지 않을 메모리 445 00:19:33,680 --> 00:19:34,770 그들은 호출 할 때. 446 00:19:34,770 --> 00:19:38,100 이 때, 장기 메모리 사용되는 당신은 하나의 함수 몇 가지를 잡아하려면 447 00:19:38,100 --> 00:19:42,700 메모리와에 걸 수있을 그 위에 컨트롤을 잃지 않고. 448 00:19:42,700 --> 00:19:45,550 >> 지금 당신은 아마 즉시 ​​수 이없는 것을 볼 수 449 00:19:45,550 --> 00:19:48,060 완벽한 디자인을 반드시. 450 00:19:48,060 --> 00:19:51,350 프로그램이에 메모리를 할당하여 스택, 또는 전화로 더 451 00:19:51,350 --> 00:19:55,540 더 많은 기능, 또는 할당으로 로 해제 malloc을 가진 힙 메모리 452 00:19:55,540 --> 00:20:00,690 getString는이 일을 무엇 명확하게 피할 수없는 문제가 될 것 같다? 453 00:20:00,690 --> 00:20:00,860 >> 오른쪽. 454 00:20:00,860 --> 00:20:03,150 사실 좋아하는이 화살표 서로를 가리키는 455 00:20:03,150 --> 00:20:04,380 잘 징조하지 않습니다. 456 00:20:04,380 --> 00:20:08,630 그리고 실제로, 우리는 매우 신속하게 중단 될 수 가지 방법으로 수있는 프로그램입니다. 457 00:20:08,630 --> 00:20:12,050 사실, 우리가 가지고있는 것 같아요 이 실수 번만 수행. 458 00:20:12,050 --> 00:20:14,020 아니면하지 않을 경우, 그것을하자 의도적 지금. 459 00:20:14,020 --> 00:20:21,330 내가 가서 빨리 슈퍼 작성할 수 이 프로그램은 dontdothis.c했다. 460 00:20:21,330 --> 00:20:26,730 그리고 지금 여기에 갈거야 날카로운 stdio.h에 포함 않습니다. 461 00:20:26,730 --> 00:20:32,620 foo 함수가 수행 선언하자 인수, 이는 없다 462 00:20:32,620 --> 00:20:34,040 무효로뿐만 아니라 나타낸다. 463 00:20:34,040 --> 00:20:37,830 >> 그리고 foo는 할 것입니다 만 점은 아마없는 호출 foo는, 464 00:20:37,830 --> 00:20:39,100 똑똑한 생각하지만, 그렇게해야합니다. 465 00:20:39,100 --> 00:20:40,490 엔트 주요 무효. 466 00:20:40,490 --> 00:20:45,270 지금 메인이가는 유일한 할 것이 아니라 foo는 호출입니다. 467 00:20:45,270 --> 00:20:51,050 그냥 재미를 위해, 내가 갈거야 앞으로 여기에서 "안녕하세요 printf의 말 468 00:20:51,050 --> 00:20:52,340 foo는. " 469 00:20:52,340 --> 00:20:52,890 >> 확인을 클릭합니다. 470 00:20:52,890 --> 00:21:00,160 내가 어떤 실수를하지 않았다 만약 그렇다면, dontdothis 점 슬래시를 확인합니다. 471 00:21:00,160 --> 00:21:01,960 그리고하자 더 큰 창에서이 작업을 수행 - 472 00:21:01,960 --> 00:21:03,210 점 슬래시, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 어서. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 어 오. 477 00:21:11,890 --> 00:21:13,100 분명히, 당신은이 작업을 수행 할 수 있습니다. 478 00:21:13,100 --> 00:21:15,190 젠장. 479 00:21:15,190 --> 00:21:16,190 확인을 클릭합니다. 480 00:21:16,190 --> 00:21:16,580 기다립니다. 481 00:21:16,580 --> 00:21:17,370 대기. 482 00:21:17,370 --> 00:21:18,270 우리는 한 - 483 00:21:18,270 --> 00:21:20,110 우리는 확인과 함께 사용했다. 484 00:21:20,110 --> 00:21:22,050 >> [한숨] 485 00:21:22,050 --> 00:21:25,110 >> 알아요하지만 우리 생각 그냥 삭제됩니다. 486 00:21:25,110 --> 00:21:28,410 어, 그래. 487 00:21:28,410 --> 00:21:30,660 젠장. 488 00:21:30,660 --> 00:21:32,640 이 로브를 해결합니다. 489 00:21:32,640 --> 00:21:34,678 무엇인가? 490 00:21:34,678 --> 00:21:35,928 그것은 매우 간단합니다. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 그래, 우리는 최적화를 해제. 493 00:21:47,360 --> 00:21:48,970 OK, 안녕하라. 494 00:21:48,970 --> 00:21:49,950 지금은 잘 생각합니다. 495 00:21:49,950 --> 00:21:51,390 확인을 클릭합니다. 496 00:21:51,390 --> 00:21:51,780 좋아. 497 00:21:51,780 --> 00:21:53,430 >> 그럼이를 다시 컴파일하자 - 498 00:21:53,430 --> 00:21:55,880 당신이 dontdothis합니다. 499 00:21:55,880 --> 00:22:00,090 당신이 이름을 변경해야 할 수도 있습니다 잠시 후에 dothis.c. 500 00:22:00,090 --> 00:22:00,710 거기 우리는 간다. 501 00:22:00,710 --> 00:22:01,240 감사합니다. 502 00:22:01,240 --> 00:22:02,050 확인을 클릭합니다. 503 00:22:02,050 --> 00:22:05,480 그래서 인쇄 된 사실 뭔가 아웃 하필 504 00:22:05,480 --> 00:22:08,150 프로세스를 느리게하는 우리 그 시점에 도달 한 것이다. 505 00:22:08,150 --> 00:22:08,510 확인을 클릭합니다. 506 00:22:08,510 --> 00:22:08,870 휴! 507 00:22:08,870 --> 00:22:11,180 >> 그래서 사실이야? 508 00:22:11,180 --> 00:22:14,440 단지 옆으로도 이유는있다 입력의 관점에서 무엇을하고 509 00:22:14,440 --> 00:22:17,270 출력 속도가 느린 경향이 있기 때문에 당신 에 문자를 작성해야 510 00:22:17,270 --> 00:22:18,600 화면이 스크롤 할 수 있습니다. 511 00:22:18,600 --> 00:22:21,720 너무 오래 짧은 이야기, 내가 실제로 있었다 이렇게 참을성이 일어난, 우리는 것 512 00:22:21,720 --> 00:22:23,260 이뿐만 아니라 최종 결과는 본. 513 00:22:23,260 --> 00:22:26,220 나는 인쇄 올린다 타고있어, 이제는 우리는 바로 그것을 참조하십시오. 514 00:22:26,220 --> 00:22:28,410 그럼 왜이 일어나고있다. 515 00:22:28,410 --> 00:22:31,300 음, 물론 간단한 설명, 그 foo는 아마 안된다입니다 516 00:22:31,300 --> 00:22:32,500 자신을 호출 할 수. 517 00:22:32,500 --> 00:22:34,470 >> 이제 일반적인 용어에서, 이 재귀이다. 518 00:22:34,470 --> 00:22:36,970 그리고 우리는 몇 주 생각 전 재귀 좋다. 519 00:22:36,970 --> 00:22:40,330 재귀는이 마법의 방법입니다 간결 최고 자신을 표현. 520 00:22:40,330 --> 00:22:41,400 그리고 그냥 작동합니다. 521 00:22:41,400 --> 00:22:45,060 그러나의 모든 주요 기능이 있습니다 우리가 얘기했습니다 재귀 프로그램 522 00:22:45,060 --> 00:22:48,260 약 및 보았다 지금까지, 어떤 그들이 무엇을했다고했다? 523 00:22:48,260 --> 00:22:52,610 일부 하드 코딩 된 기본 케이스, 어떤 상황에서 말했다 경우 524 00:22:52,610 --> 00:22:56,210 명확하게 foo는 호출하지 않습니다 여기에없는 경우. 525 00:22:56,210 --> 00:22:58,920 >> 그래서 정말 무슨 일이 일어나고 이 그림의 측면에서? 526 00:22:58,920 --> 00:23:01,790 잘 때, 주요 foo는, 그 호출 기억의 조각을 가져옵니다. 527 00:23:01,790 --> 00:23:04,150 foo는 foo는 호출 할 때 얻을 기억의 조각. 528 00:23:04,150 --> 00:23:06,430 foo는 foo는 호출 할 때 슬라이스를 가져옵니다. 529 00:23:06,430 --> 00:23:07,080 그것은 조각을 가져옵니다. 530 00:23:07,080 --> 00:23:08,120 그것은 조각을 가져옵니다. 531 00:23:08,120 --> 00:23:09,460 foo는은 반환되지 않습니다 때문입니다. 532 00:23:09,460 --> 00:23:12,160 우리는 그 중 하나를 삭제하지거야 스택 프레임입니다. 533 00:23:12,160 --> 00:23:15,930 그래서 우리는 힙을하지 불고있어 누가 무엇을 다른 사람 알고 있고, 물론, 534 00:23:15,930 --> 00:23:19,600 우리는 우리의 경계를 넘고있어 메모리 세그먼트 소위. 535 00:23:19,600 --> 00:23:21,790 분할이 거짓 가서 오류가 발생했습니다. 536 00:23:21,790 --> 00:23:24,110 >> 따라서이 솔루션 명확하게이 작업을 수행하지 않습니다. 537 00:23:24,110 --> 00:23:28,830 그러나 더 큰 의미는, 예이며, 절대적으로 몇 가지 한계가있다 538 00:23:28,830 --> 00:23:32,470 그것은 잘 방법으로 정의 아닌 경우에도 당신이에서 호출 할 수 많은 기능 539 00:23:32,470 --> 00:23:34,970 프로그램을 몇 번 기능 자신을 호출 할 수 있습니다. 540 00:23:34,970 --> 00:23:38,430 우리는 재귀를 전파했다 그래서 비록 이 잠재적 마법 것으로서 541 00:23:38,430 --> 00:23:41,870 시그마 전 몇 주 기능 및 때 우리가 데이터를 얻을 542 00:23:41,870 --> 00:23:45,270 구조와 CS50, 당신은 다른 볼 수 있습니다 그것을 위해 응용 프로그램은 그렇지 않아 543 00:23:45,270 --> 00:23:46,500 반드시 좋은 것은. 544 00:23:46,500 --> 00:23:50,070 함수 자체를 호출하는 경우 때문에, 베이스가있다하더라도, 자신을 호출 545 00:23:50,070 --> 00:23:54,860 경우, 당신은 그 기저 케이스에 충돌하지 않는 경우 1000 통화 또는 10,000 통화에 의해 546 00:23:54,860 --> 00:23:58,800 당신은 공간이 부족했을 가능성이있는 시간 귀하의 이른바 스택 히트에 547 00:23:58,800 --> 00:24:00,400 메모리의 다른 부분. 548 00:24:00,400 --> 00:24:03,950 그래서 너무 디자인 트레이드 오프입니다 우아함 사이 사이 549 00:24:03,950 --> 00:24:06,920 특정의 견고성 구현. 550 00:24:06,920 --> 00:24:10,780 >> 그래서 또 다른 단점이나 거기 우리가 한 것을 또 다른 잡았다 551 00:24:10,780 --> 00:24:11,720 지금까지 해왔. 552 00:24:11,720 --> 00:24:12,980 나는 getString에 전화했을 때 - 553 00:24:12,980 --> 00:24:15,120 나를 안녕하세요-2로 다시 가자. 554 00:24:15,120 --> 00:24:18,170 내가 getString는 호출 해요 통지 이는 주소를 반환합니다. 555 00:24:18,170 --> 00:24:20,730 그리고 우리는 오늘날 주장하는 주소 힙입니다. 556 00:24:20,730 --> 00:24:24,480 지금은 밖으로 인쇄하고 해당 주소 문자열입니다. 557 00:24:24,480 --> 00:24:27,000 그러나 우리는이라는 적이 getString에 반대. 558 00:24:27,000 --> 00:24:30,850 우리는 같은 기능을 calll 할 필요가 없었어요 당신이 손 다시 ungetstring, 559 00:24:30,850 --> 00:24:31,610 해당 메모리. 560 00:24:31,610 --> 00:24:33,250 그러나 솔직히 우리는 아마 되어 있어야합니다. 561 00:24:33,250 --> 00:24:37,390 때문에 우리는 컴퓨터를 질문을 계속하면 같은 사람의 메모리에 의한 방법 562 00:24:37,390 --> 00:24:40,830 getString는하지만 확실히 다시 포기하지 않을 너무 이어질에 바인딩 563 00:24:40,830 --> 00:24:42,970 우리는 메모리를 실행하는 그것에 문제. 564 00:24:42,970 --> 00:24:46,140 >> 그리고 사실, 우리는이를 찾을 수 있습니다 사용 새로운 도구 문제 565 00:24:46,140 --> 00:24:47,640 입력 할 조금 이상한 것입니다. 566 00:24:47,640 --> 00:24:50,960 그러나 내가 가서 그것을 튀하자 잠시 후에 화면에. 567 00:24:50,960 --> 00:24:56,940 내가 가서 Valgrind를 실행하는거야 그 첫 번째 명령 매개 변수 568 00:24:56,940 --> 00:25:00,260 라인 인수의 이름입니다 이 프로그램 안녕하세요 - 2. 569 00:25:00,260 --> 00:25:02,650 불행히도 그것은이다 출력 atrociously입니다 570 00:25:02,650 --> 00:25:04,290 이유없이 복잡한. 571 00:25:04,290 --> 00:25:06,280 그래서 우리는 그 모든 혼란을 참조하십시오. 572 00:25:06,280 --> 00:25:07,530 다윗은 내 이름을 상태입니다. 573 00:25:07,530 --> 00:25:09,760 그래서이 프로그램의 실제로 실행할 수 있습니다. 574 00:25:09,760 --> 00:25:11,180 그리고 지금 우리는이 출력을 얻을. 575 00:25:11,180 --> 00:25:13,400 >> 그래서 Valgrind는 유사하다 GDB에 정신을합니다. 576 00:25:13,400 --> 00:25:14,950 그것은 자체 디버거 아니다. 577 00:25:14,950 --> 00:25:16,270 그러나 메모리 검사입니다. 578 00:25:16,270 --> 00:25:20,140 그것은 당신을 실행하는 프로그램입니다 프로그램 및 요구한다면, 당신에게 579 00:25:20,140 --> 00:25:23,860 메모리 컴퓨터 결코 그것을 손으로 다시, 따라서 당신이 가지고있는 의미 580 00:25:23,860 --> 00:25:24,570 메모리 누수가 발생합니다. 581 00:25:24,570 --> 00:25:26,240 메모리 누수가 나쁜 경향이있다. 582 00:25:26,240 --> 00:25:29,120 그리고 당신은 컴퓨터 사용자가 가지고 있습니다 아마 이것은 당신이 있는지 여부를 느꼈다 583 00:25:29,120 --> 00:25:30,300 Mac 또는 PC. 584 00:25:30,300 --> 00:25:33,730 당신은 컴퓨터를 사용했다 여러 재부팅되지 동안 585 00:25:33,730 --> 00:25:36,820 일, 아니면 그냥 많이있어 실행중인 프로그램, 그리고 빌어 먹을 것 586 00:25:36,820 --> 00:25:42,360 연삭 중단 느리게, 또는 적어도 있기 때문에, 사용하기 매우 성가신 587 00:25:42,360 --> 00:25:44,350 모든 것이 매우 느린 얻었다. 588 00:25:44,350 --> 00:25:46,260 >> 이제 그 이유 중의 임의의 숫자 일 수 있습니다. 589 00:25:46,260 --> 00:25:49,600 그것은 무한 루프에 버그가있을 수 다른 사람의 코드 또는, 더 간단하게, 그 590 00:25:49,600 --> 00:25:53,250 당신이 더 많은 것을 사용하고 있다는 것을 의미 할 수 귀하의보다 메모리 또는하려고 591 00:25:53,250 --> 00:25:54,920 컴퓨터가 실제로있다. 592 00:25:54,920 --> 00:25:57,770 그리고 어쩌면 어떤 프로그램에 버그가있다 메모리 질문을 계속합니다. 593 00:25:57,770 --> 00:26:02,480 년 동안 브라우저는 악명이 있었다 이, 더 많은 메모리를 요구 594 00:26:02,480 --> 00:26:03,870 하지만 다시 나눠되지 않습니다. 595 00:26:03,870 --> 00:26:07,220 확실히, 당신은 단지 유한이있는 경우 메모리 양, 당신은 질문 할 수 596 00:26:07,220 --> 00:26:09,990 에 대한 무한히 많은 시간 해당 메모리의 일부. 597 00:26:09,990 --> 00:26:13,070 >> 그래서 당신은, 비록 여기에서 보는 무슨 다시 Valgrind는의 출력은 598 00:26:13,070 --> 00:26:17,490 언뜻 불필요하게 복잡 먼저,이 흥미로운 부분입니다. 599 00:26:17,490 --> 00:26:18,890 힙 - 600 00:26:18,890 --> 00:26:20,060 출구를 사용합니다. 601 00:26:20,060 --> 00:26:22,810 그래서 여기에 얼마나 많은 메모리가 있었다이다 에서 힙에서 사용 602 00:26:22,810 --> 00:26:24,300 시간 내 프로그램 종료 - 603 00:26:24,300 --> 00:26:27,280 한 블록에 분명히 6 바이트. 604 00:26:27,280 --> 00:26:28,710 그래서 난 내 손을 흔드는거야 무엇 블록입니다. 605 00:26:28,710 --> 00:26:31,270 더, 그냥 덩어리 생각할 청크에 대한 기술 단어입니다. 606 00:26:31,270 --> 00:26:33,140 6 바이트 만 - 607 00:26:33,140 --> 00:26:36,870 그 6 바이트는 무엇입니까 아직 사용했다? 608 00:26:36,870 --> 00:26:37,390 >> 정확히. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D 백 슬래시 제로 다섯 글자 이름과 null 종결. 610 00:26:41,520 --> 00:26:46,350 그래서이 프로그램은 발견 Valgrind의 그 I 에 의해 분명히 6 바이트를 요청 611 00:26:46,350 --> 00:26:48,950 getString에의 길, 그러나 결코 그들을 다시했다. 612 00:26:48,950 --> 00:26:52,030 그리고 사실, 이건 너무하지 않을 수 있습니다 내 프로그램은 세없는 명백한 경우 613 00:26:52,030 --> 00:26:53,590 라인,하지만 300 선입니다. 614 00:26:53,590 --> 00:26:56,920 그래서 우리는 실제로 다른 명령을 줄 수 있습니다 라인 인수로 Valgrind의합니다 615 00:26:56,920 --> 00:26:58,290 그것은 더 자세한 확인합니다. 616 00:26:58,290 --> 00:26:59,760 그것은 기억을 좀 짜증나. 617 00:26:59,760 --> 00:27:01,580 하지만 난 할 경우 - 618 00:27:01,580 --> 00:27:01,930 보자. 619 00:27:01,930 --> 00:27:03,540 누출 - 620 00:27:03,540 --> 00:27:05,030 그것은 누출 된 - 621 00:27:05,030 --> 00:27:07,580 심지어 기억이 안나요 그것은 손 떨어져 무엇인지. 622 00:27:07,580 --> 00:27:08,550 >> - 누출 검사가 가득 같습니다. 623 00:27:08,550 --> 00:27:10,180 네, 감사합니다. 624 00:27:10,180 --> 00:27:12,520 - 누출 검사가 가득 같습니다. 625 00:27:12,520 --> 00:27:13,800 입력합니다. 626 00:27:13,800 --> 00:27:14,940 같은 프로그램이 실행됩니다. 627 00:27:14,940 --> 00:27:16,180 또 다윗 입력합니다. 628 00:27:16,180 --> 00:27:17,660 지금은 조금 자세한 내용을 참조하십시오. 629 00:27:17,660 --> 00:27:20,890 그러나 힙 요약 아래있는 네 동일합니다 - 아, 630 00:27:20,890 --> 00:27:22,120 이것은 좋은 종류이다. 631 00:27:22,120 --> 00:27:25,460 지금 Valgrind는 실제로 찾고 있습니다 내 코드에서 더 작은. 632 00:27:25,460 --> 00:27:29,580 그리고 그것은 분명히 그 말 것 라인 malloc에​​ - 633 00:27:29,580 --> 00:27:30,580 우리는 축소. 634 00:27:30,580 --> 00:27:31,980 에서 선 - 635 00:27:31,980 --> 00:27:32,930 우리는 그것이 무엇인지 라인 표시되지 않습니다. 636 00:27:32,930 --> 00:27:35,110 하지만, malloc을 첫 번째 원인이다. 637 00:27:35,110 --> 00:27:38,630 malloc에​​있는 블로그가있다. 638 00:27:38,630 --> 00:27:39,810 >> 모든 권리? 639 00:27:39,810 --> 00:27:40,450 OK, 아니. 640 00:27:40,450 --> 00:27:40,940 오른쪽? 641 00:27:40,940 --> 00:27:42,520 내가하는 GetString했다. 642 00:27:42,520 --> 00:27:44,460 getString는 분명히 malloc을 호출합니다. 643 00:27:44,460 --> 00:27:47,800 그래서 코드 라인은 분명히 있습니다 하는 데에 대한 장애에 644 00:27:47,800 --> 00:27:49,050 이 메모리를 할당? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 하자 누구 malloc을 쓴 것으로 가정 충분히 그건 그 주변왔다 647 00:27:55,540 --> 00:27:56,390 아니 그들의 잘못. 648 00:27:56,390 --> 00:27:57,520 그래서 아마 내 꺼야. 649 00:27:57,520 --> 00:28:02,000 cs50.c에서 getString 나 - 그건 너무 컴퓨터에 어딘가에 파일 - 650 00:28:02,000 --> 00:28:05,210 라인에 286 원인 것 같습니다. 651 00:28:05,210 --> 00:28:08,140 이제이 CS50가되었음을 가정하자 그렇게 시간이 상당한 금액에 대한 주위 652 00:28:08,140 --> 00:28:09,720 우리도 전혀 틀림이 있습니다. 653 00:28:09,720 --> 00:28:14,080 그리고 그것은 getString에있는 아마의 버그 거짓말, 오히려있는 것이 654 00:28:14,080 --> 00:28:17,810 안녕하세요-2.C 라인 18. 655 00:28:17,810 --> 00:28:20,670 >> 그러니 살펴 보자 그 라인 18 것이었다. 656 00:28:20,670 --> 00:28:21,130 오. 657 00:28:21,130 --> 00:28:27,130 어떻게 든이 줄 필요는 없습니다 버그 라기보다는,하지만 이유 658 00:28:27,130 --> 00:28:28,630 이 메모리 누수 뒤에. 659 00:28:28,630 --> 00:28:32,140 그래서 슈퍼 단순히 어떤 일이 직관적 것 여기 해결책이 될 수? 660 00:28:32,140 --> 00:28:34,710 우리는 메모리를 요구한다면, 결코 없었다 다시주고, 그 것으로 보인다 661 00:28:34,710 --> 00:28:37,940 문제는 시간 때문에 내 컴퓨터에 메모리가 부족할 수도 느려질 수 있습니다 662 00:28:37,940 --> 00:28:42,110 아래로, 나쁜 일, 잘 일어날 수 간단한 직관적 인 해결책은 무엇인가? 663 00:28:42,110 --> 00:28:43,140 그냥 다시 제공합니다. 664 00:28:43,140 --> 00:28:44,770 >> 어떻게 당신은 메모리를 확보해야합니까? 665 00:28:44,770 --> 00:28:49,970 음, 다행히도 그것은 매우 간단 그냥 무료로 이름을 말할 수 있습니다. 666 00:28:49,970 --> 00:28:51,260 그리고 우리는 전에 해본 적이 없다. 667 00:28:51,260 --> 00:28:55,890 하지만 당신은 본질적으로 생각할 수 의 malloc 반대, 무료. 668 00:28:55,890 --> 00:28:58,030 자유의 반대 메모리를 할당. 669 00:28:58,030 --> 00:28:59,540 이제 날이 다시 컴파일 할 수 있습니다. 670 00:28:59,540 --> 00:29:02,050 안녕하세요-2를 확인합니다. 671 00:29:02,050 --> 00:29:04,620 저를 다시 실행하자. 안녕하세요-2 데이비드. 672 00:29:04,620 --> 00:29:07,290 그래서에서 작동하도록 보인다 동일한 방법입니다. 673 00:29:07,290 --> 00:29:11,180 하지만 Valgrind의 다시 가서 다시 실행하면 나의 최근에서 동일한 명령 674 00:29:11,180 --> 00:29:14,720 컴파일 된 프로그램을 입력 이전과 내 이름으로 - 675 00:29:14,720 --> 00:29:15,370 좋은. 676 00:29:15,370 --> 00:29:16,760 힙 요약 - 677 00:29:16,760 --> 00:29:17,740 - 출구 사용 678 00:29:17,740 --> 00:29:19,370 제로 블록에 0 바이트. 679 00:29:19,370 --> 00:29:21,840 그리고 이것은 매우 좋은, 모든 것입니다 힙 블록이 해제되었다. 680 00:29:21,840 --> 00:29:23,480 누출이 가능합니다. 681 00:29:23,480 --> 00:29:27,200 >> 그래서,없는 문제 4 세트와 함께 올라오고 하지만 문제 세트 5, 법의학에 682 00:29:27,200 --> 00:29:30,740 그리고 이후이 너무 될 것입니다 여러분의 정확성의 측정 683 00:29:30,740 --> 00:29:33,630 당신이 있는지 여부를 프로그램 또는 메모리 누수가 없습니다. 684 00:29:33,630 --> 00:29:36,900 그러나 다행히도, 당신은 추론 할 수 있습니다뿐만 아니라, 그 직관적으로, 어떤 통해 685 00:29:36,900 --> 00:29:40,430 작은 프로그램을 쉽게, 틀림없이이다 하지만 큰 프로그램에 대한 더, 686 00:29:40,430 --> 00:29:43,860 그 큰 프로그램, Valgrind의 당신이 식별 할 수 있습니다 687 00:29:43,860 --> 00:29:45,360 특정 문제. 688 00:29:45,360 --> 00:29:47,500 >> 그러나 다른 하나의 문제가있다 그가 발생할 수 있습니다. 689 00:29:47,500 --> 00:29:51,245 , 어떤은, 내가 여기서이 파일을 열어 보자 또, 다소 간단한 예제. 690 00:29:51,245 --> 00:29:53,760 그러나하자 무엇에 초점을 이 프로그램을 수행합니다. 691 00:29:53,760 --> 00:29:55,190 이 memory.c에 호출된다. 692 00:29:55,190 --> 00:29:58,380 우리는이 나중에 오늘 게시합니다 오늘의 소스 코드를 우편. 693 00:29:58,380 --> 00:30:01,610 그리고라는 기능을 가지고 것을 알 수 인수를 취하지 않습니다 F 694 00:30:01,610 --> 00:30:02,800 아무 것도 반환하지 않습니다. 695 00:30:02,800 --> 00:30:07,240 라인 20에서, 내가 분명히 선언하고 있습니다 INT와 X 호출에 대한 포인터. 696 00:30:07,240 --> 00:30:09,570 내가 할당있어이 반환됩니다 malloc에​​ 값. 697 00:30:09,570 --> 00:30:14,590 다만 얼마나 많은 바이트, 명확하게 아마 malloc에​​에서 돌아와 698 00:30:14,590 --> 00:30:17,080 이 상황에서? 699 00:30:17,080 --> 00:30:18,040 >> 아마 40. 700 00:30:18,040 --> 00:30:18,840 어떻게 알아? 701 00:30:18,840 --> 00:30:22,410 글쎄, 당신은 INT는 종종 것을 기억하는 경우 4 바이트는, 적어도 그것은에 702 00:30:22,410 --> 00:30:25,110 제품은 배 4 10 분명히 40입니다. 703 00:30:25,110 --> 00:30:28,920 그래서 malloc에​​의 주소를 반환 메모리 청크와 저장이 704 00:30:28,920 --> 00:30:30,800 X 궁극적으로 해결합니다. 705 00:30:30,800 --> 00:30:32,570 그래서, 명확하게 무엇을 다음 일 이죠? 706 00:30:32,570 --> 00:30:34,990 물론, 내가 다시 전환 할 여기에 우리의 그림에. 707 00:30:34,990 --> 00:30:38,150 내가 내의 바닥을 그리하지 말자 컴퓨터의 메모리 나 앞서 가자와 708 00:30:38,150 --> 00:30:42,990 전체 사각형을 그리는 내 RAM을 모두 나타냅니다. 709 00:30:42,990 --> 00:30:44,790 >> 우리는 말할 것 그 스택 하단에 있습니다. 710 00:30:44,790 --> 00:30:47,010 그리고 텍스트 세그먼트에있다 초기화되지 않은 데이터입니다. 711 00:30:47,010 --> 00:30:49,880 하지만 난 그냥 추상적 사람들에게 갈거야 멀리 점, 점 점 다른 확인해보세요. 712 00:30:49,880 --> 00:30:53,470 난 그냥이 참조하는거야 상단에 힙으로. 713 00:30:53,470 --> 00:30:57,070 그리고이 그림의 하단에, 주를 대표하는, 내가 갈거야 714 00:30:57,070 --> 00:30:59,880 그것을 슬라이스 메모리를주는 스택에. 715 00:30:59,880 --> 00:31:03,150 F를 들어, 나는 그것을 슬라이스를 줄거야 스택에 메모리가 부족합니다. 716 00:31:03,150 --> 00:31:05,140 지금, 나는 나의 상담을 얻었다 다시 소스 코드입니다. 717 00:31:05,140 --> 00:31:07,170 주에 대한 로컬 변수는 무엇입니까? 718 00:31:07,170 --> 00:31:10,710 분명히 아무것도, 그래서 슬라이스입니다 효과적으로 비어 있거나 심지어 같은 큰 719 00:31:10,710 --> 00:31:11,600 내가 그린 것 같은. 720 00:31:11,600 --> 00:31:15,730 그러나 F에, 나는 지역 변수가 어떤이 X라고합니다. 721 00:31:15,730 --> 00:31:20,410 그래서 내가 가서 F를 줄거야 그것은 X 호출 메모리 덩어리. 722 00:31:20,410 --> 00:31:24,680 >> 10 시간 4 지금 malloc에 그건 malloc에​​ 40, 그래서 723 00:31:24,680 --> 00:31:25,430 메모리에서 오는? 724 00:31:25,430 --> 00:31:27,530 우리는 그림을 그려 적이 없다 전에이 좋아합니다. 725 00:31:27,530 --> 00:31:31,140 그러나의 그것은 효과적으로 있다고 가정하자 그래서 하나가 여기에서 오는, 726 00:31:31,140 --> 00:31:33,170 둘, 셋, 넷, 다섯. 727 00:31:33,170 --> 00:31:34,680 그리고 지금이 40이 필요합니다. 728 00:31:34,680 --> 00:31:37,540 그래서 난 그냥 제안하는 점, 점, 점을 다하겠습니다 더 많은 메모리가 있다는 것을 729 00:31:37,540 --> 00:31:39,350 힙에서 오는. 730 00:31:39,350 --> 00:31:40,710 현재 주소는 무엇입니까? 731 00:31:40,710 --> 00:31:42,620 하자 우리의 임의의 선택 언제나 해결 - 732 00:31:42,620 --> 00:31:46,310 아마 무슨하더라도 Ox123, 완전히 다른 것이 될 수 있습니다. 733 00:31:46,310 --> 00:31:50,420 그의 첫 번째 바이트의 주소입니다 나는을 위해 malloc을 부탁 해요 기억합니다. 734 00:31:50,420 --> 00:31:53,630 >> 그래서 짧은 한 줄에 20 실행 말 그대로 무엇인가 735 00:31:53,630 --> 00:31:57,170 여기에서 X의 내부에 저장된? 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 그리고 황소는 재미있다. 739 00:32:01,550 --> 00:32:03,200 그것은 단지 여기에 의미 진수. 740 00:32:03,200 --> 00:32:06,490 그러나 중요한 것은 내가 가게를 한 내용이다 X에서, 어느 지역 변수입니다. 741 00:32:06,490 --> 00:32:10,260 그러나 해당 데이터 형식, 다시, INT의 주소입니다. 742 00:32:10,260 --> 00:32:12,710 글쎄, 난 Ox123를 저장하는거야. 743 00:32:12,710 --> 00:32:16,610 그러나 다시, 너무 그건 경우 내가 스크롤하면, 불필요하게 복잡 744 00:32:16,610 --> 00:32:21,490 다시, 우리는이 추상화 할 수있는 매우 합리적 그냥 말하는 X는 745 00:32:21,490 --> 00:32:23,910 메모리의 청크에 대한 포인터. 746 00:32:23,910 --> 00:32:24,070 >> 확인을 클릭합니다. 747 00:32:24,070 --> 00:32:26,230 지금 손에 질문 다음과 같습니다 - 748 00:32:26,230 --> 00:32:29,910 라인 (21)은, 그것은 밝혀, 버그이다. 749 00:32:29,910 --> 00:32:31,160 왜? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> 네? 752 00:32:36,930 --> 00:32:38,640 그것은하지 않습니다 - 753 00:32:38,640 --> 00:32:40,390 한번 더 그런 말. 754 00:32:40,390 --> 00:32:41,240 글쎄요, 그것은 무료로하지 않습니다. 755 00:32:41,240 --> 00:32:42,350 그래서 두 번째이지만. 756 00:32:42,350 --> 00:32:45,000 그래서 다른 그러나 구체적으로 하나가있다 라인 21에서. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> 정확히. 759 00:32:50,040 --> 00:32:54,980 코드의이 간단한 라인은 단지입니다 버퍼 오버플로, 버퍼 오버런. 760 00:32:54,980 --> 00:32:57,050 버퍼는 단지 메모리 청크를 의미한다. 761 00:32:57,050 --> 00:33:01,520 그러나 메모리의 청크 크기입니다 10, 10의 정수, 그 의미가 우리 762 00:33:01,520 --> 00:33:05,350 문법 설탕을 사용하여 그것으로 인덱스 배열 표기법의, 광장 763 00:33:05,350 --> 00:33:09,220 괄호, 당신은에 액세스 할 수 있습니다 x 부류 0 X 브라켓 1 개, 764 00:33:09,220 --> 00:33:10,390 브래킷 점, 점, 점. 765 00:33:10,390 --> 00:33:13,270 x 부류 9 가장 큰 하나입니다. 766 00:33:13,270 --> 00:33:17,680 나는 x 부류 10을 할 그렇다면 여기서 실제로 메모리에 갈거야? 767 00:33:17,680 --> 00:33:19,120 >> 글쎄, 난 10 지능이있는 경우 - 768 00:33:19,120 --> 00:33:21,070 하자 실제로 모든 그리기 다음은 이러한 중. 769 00:33:21,070 --> 00:33:22,700 그래서 첫 번째 다섯이었다. 770 00:33:22,700 --> 00:33:24,660 여기에 다른 다섯 개의 정수이다. 771 00:33:24,660 --> 00:33:29,580 그래서 x 부류 0 여기에있다. x 부류 1은 여기에. x 부류 9 여기에있다. x 부류 772 00:33:29,580 --> 00:33:37,960 10 여기, 이는 내가 말하고 의미 21 행에서, 컴퓨터를 넣어 773 00:33:37,960 --> 00:33:39,400 숫자 어디? 774 00:33:39,400 --> 00:33:42,010 숫자 0 어디? 775 00:33:42,010 --> 00:33:43,380 음, 예, 0이다. 776 00:33:43,380 --> 00:33:45,460 하지만 단지 사실의 0 우연의 일종이다. 777 00:33:45,460 --> 00:33:47,140 그것은 수 수 50, 우리는주의 모든. 778 00:33:47,140 --> 00:33:50,480 그러나 우리는 x 부류에 넣어 위해 노력하고 곳에서 10, 779 00:33:50,480 --> 00:33:53,700 물음표가 그려지는 좋은 일이 아닙니다. 780 00:33:53,700 --> 00:33:57,070 이 프로그램은 아주 잘 수도 그 결과로 충돌이 발생합니다. 781 00:33:57,070 --> 00:33:59,400 >> 자, 가서 보자이 경우 실제로 어떤 일이 발생합니다. 782 00:33:59,400 --> 00:34:02,600 추억을 만들어 이후 파일 memory.c에 호출됩니다. 783 00:34:02,600 --> 00:34:05,950 자, 가서 실행 프로그램 메모리. 784 00:34:05,950 --> 00:34:08,239 그래서 우리는 행운이있어, 실제는 것 같다. 785 00:34:08,239 --> 00:34:09,340 우리는 운이 좋았어요. 786 00:34:09,340 --> 00:34:11,060 그러나 우리가 지금 Valgrind의를 실행하는 경우 보자. 787 00:34:11,060 --> 00:34:14,170 첫눈에, 내 프로그램은 수도 완벽하게 맞는 것 같습니다. 788 00:34:14,170 --> 00:34:18,010 하지만 함께 Valgrind의 날 실행할 수 - 누출 검사는 메모리에 전체 같습니다. 789 00:34:18,010 --> 00:34:20,110 >> 그리고 지금 나는이 프로그램을 실행할 때 - 790 00:34:20,110 --> 00:34:21,030 흥미 롭군요. 791 00:34:21,030 --> 00:34:26,800 잘못된에서 크기가 4 쓰기 memory.c에 라인 21. 792 00:34:26,800 --> 00:34:29,284 memory.c에 라인 21 어느입니까? 793 00:34:29,284 --> 00:34:30,340 아, 흥미 롭군요. 794 00:34:30,340 --> 00:34:31,080 하지만 기다립니다. 795 00:34:31,080 --> 00:34:32,389 크기 4, 언급하는 무엇입니까? 796 00:34:32,389 --> 00:34:34,969 나는 단지 하나 작성 않았다 하지만 크기는 4입니다. 797 00:34:34,969 --> 00:34:36,889 왜 4인가요? 798 00:34:36,889 --> 00:34:39,280 그것은 어떤 INT, 때문에 그것은이다 다시 4 바이트입니다. 799 00:34:39,280 --> 00:34:42,510 그래서 Valgrind의 버그를 발견 I, 내 코드에서 반짝이기는하지만,하지 않았다. 800 00:34:42,510 --> 00:34:45,040 그리고 어쩌면 당신의 TF는 것 또는하지 않을 것입니다. 801 00:34:45,040 --> 00:34:48,469 하지만 확실히 발견을 위해 Valgrind의 어떤 우리는 심지어 거기에 실수를 한 것 802 00:34:48,469 --> 00:34:52,719 우리는 행운이있어, 그리고 비록 컴퓨터 결정, 어, 내가 충돌하지 않을거야 803 00:34:52,719 --> 00:34:57,470 당신은 한 바이트를 접촉해서 당신이하지 않은 메모리 INT의 가치 804 00:34:57,470 --> 00:34:58,550 실제로 자신의. 805 00:34:58,550 --> 00:35:00,380 >> 음, 여기에 버그가 다른 것입니다. 806 00:35:00,380 --> 00:35:01,180 주소 - 807 00:35:01,180 --> 00:35:03,190 이 미친 찾고 주소 진수있다. 808 00:35:03,190 --> 00:35:06,890 그냥 어딘가에 힙을 의미하는 사이즈 40의 블록 후 0 바이트 809 00:35:06,890 --> 00:35:07,620 할당됩니다. 810 00:35:07,620 --> 00:35:10,610 내가 여기서 축소하고 보자하는 경우 이것은 좀 더 도움이됩니다. 811 00:35:10,610 --> 00:35:11,410 흥미 롭군요. 812 00:35:11,410 --> 00:35:15,600 40 바이트는 확실히 손실 1 손실 기록 1인치 813 00:35:15,600 --> 00:35:17,840 또,보다 더 많은 단어는 여기에 유용합니다. 814 00:35:17,840 --> 00:35:21,350 하지만, 강조 라인에 따라 어디 아마 집중해야 내 815 00:35:21,350 --> 00:35:24,070 또 다른 버그에 대한 관심? 816 00:35:24,070 --> 00:35:26,570 memory.c에의 라인 (20)처럼 보인다. 817 00:35:26,570 --> 00:35:30,990 >> 우리는 라인 (20)으로 돌아가 그렇다면 그건 당신이 이전에 발견 한. 818 00:35:30,990 --> 00:35:33,030 그리고 버그가 반드시 아니에요. 819 00:35:33,030 --> 00:35:35,160 그러나 우리는이 그 효과를 반전했다. 820 00:35:35,160 --> 00:35:38,790 그래서 어떻게 최소한 수정합니까 그 실수 중 하나? 821 00:35:38,790 --> 00:35:42,240 나는 21 행 이후에 무엇을 할 수 있습니까? 822 00:35:42,240 --> 00:35:47,110 나는 그렇게, X 무료입니다 할 수 그 기억을 돌려 줄 수 있습니다. 823 00:35:47,110 --> 00:35:49,230 그리고이 버그를 어떻게 해결합니까? 824 00:35:49,230 --> 00:35:52,120 나는 확실히 가야한다 더 멀리 0보다 않습니다. 825 00:35:52,120 --> 00:35:53,670 그래서 나는 시도하고이를 다시 실행하자. 826 00:35:53,670 --> 00:35:56,080 죄송합니다, 확실히 이동 더 멀리 9보다가 없습니다. 827 00:35:56,080 --> 00:35:57,510 메모리를 확인합니다. 828 00:35:57,510 --> 00:36:00,650 Valgrind의 나를 다시 실행하자 큰 창을합니다. 829 00:36:00,650 --> 00:36:01,580 지금 봐. 830 00:36:01,580 --> 00:36:02,250 좋은. 831 00:36:02,250 --> 00:36:03,270 모든 힙 블록이 해제되었다. 832 00:36:03,270 --> 00:36:04,270 누출이 가능합니다. 833 00:36:04,270 --> 00:36:07,520 그리고 여기까지 위의 언급은 없습니다 잘못된 오른쪽으로 더 이상. 834 00:36:07,520 --> 00:36:09,820 >> 그냥 욕심, 그리고하자하기 볼 경우, 다른 데모 835 00:36:09,820 --> 00:36:11,050 의도 한대로 이동하지 않습니다 - 836 00:36:11,050 --> 00:36:12,560 나는 순간 전 운이 좋은 거죠. 837 00:36:12,560 --> 00:36:15,530 이 0이라는 사실은 아마도 불필요한 오해. 838 00:36:15,530 --> 00:36:20,650 단지 50, 다소 임의의 작업을 수행하자 수, 메모리 점 슬래시 추억을 만들어 - 839 00:36:20,650 --> 00:36:21,410 아직 운. 840 00:36:21,410 --> 00:36:22,510 아무것도 충돌 없어요. 841 00:36:22,510 --> 00:36:26,150 내가 정말 뭔가를 가정 바보, 나는 100을. 842 00:36:26,150 --> 00:36:30,360 나 메모리를 리메이크하자 점 슬래시 메모리 - 843 00:36:30,360 --> 00:36:31,075 다시 행운이있어. 844 00:36:31,075 --> 00:36:32,800 어떻게 약 1,000? 845 00:36:32,800 --> 00:36:35,370 이후 정수, 약, 어디서해야하나요? 846 00:36:35,370 --> 00:36:37,410 메모리를 확인합니다 - 847 00:36:37,410 --> 00:36:38,570 젠장. 848 00:36:38,570 --> 00:36:39,920 >> [웃음] 849 00:36:39,920 --> 00:36:41,270 >> 확인을 클릭합니다. 850 00:36:41,270 --> 00:36:43,920 의 이상 주변에 흩 뜨리지 수 있습니다. 851 00:36:43,920 --> 00:36:45,120 메모리를 다시 실행하십시오. 852 00:36:45,120 --> 00:36:45,840 거기 우리는 간다. 853 00:36:45,840 --> 00:36:46,410 좋아. 854 00:36:46,410 --> 00:36:52,500 그래서 분명히 당신은 인덱스 만 정수를 당신이에 있었던 위치를 넘어 855 00:36:52,500 --> 00:36:54,410 메모리, 나쁜 일이 일어날. 856 00:36:54,410 --> 00:36:56,430 그래서 이것은 분명하지 않습니다 하드 빠른 규칙입니다. 857 00:36:56,430 --> 00:36:58,190 나는 시험을 사용하여 친절했다 에러가를 얻을 수 있습니다. 858 00:36:58,190 --> 00:37:02,230 하지만이 때문에 긴 이야기를 짧은 컴퓨터의 메모리는 구분됩니다 859 00:37:02,230 --> 00:37:03,580 이러한 것들로 세그먼트했다. 860 00:37:03,580 --> 00:37:07,260 그리고 때때로, 컴퓨터 실제로 당신에게 조금 더 많은 메모리를 제공하고 있습니다 861 00:37:07,260 --> 00:37:08,400 당신을 요구보다. 862 00:37:08,400 --> 00:37:12,170 하지만 효율성을 위해, 그것은 바로 쉽게 더 많은 메모리를 얻을 수 있지만 당신에게 863 00:37:12,170 --> 00:37:13,780 당신은 그것의 부분을 얻고 있다고. 864 00:37:13,780 --> 00:37:16,370 >> 그리고 당신은 때때로 운 경우, 따라서 당신은 접촉 할 수있을 것 865 00:37:16,370 --> 00:37:17,795 그 기억은 당신에 속하지 않습니다. 866 00:37:17,795 --> 00:37:21,860 당신은 보장이 없다는 것을 어떤 값을 당신은 거기에있을 것 넣어 있기 때문에 867 00:37:21,860 --> 00:37:25,080 컴퓨터가 여전히 아니다 생각 당신,하지만 반드시 않을거야 868 00:37:25,080 --> 00:37:29,910 메모리의 또 다른 세그먼트를 칠 컴퓨터와 실수를 같이 유도 869 00:37:29,910 --> 00:37:31,710 여기 하나. 870 00:37:31,710 --> 00:37:32,060 좋아. 871 00:37:32,060 --> 00:37:37,240 다음 질문 메모리? 872 00:37:37,240 --> 00:37:37,590 >> 좋아. 873 00:37:37,590 --> 00:37:40,610 에서 다음의 여기 살펴 보자 우리가 복용 한 것을 874 00:37:40,610 --> 00:37:48,361 꽤 많은 시간 동안 부여하는 cs50.h.이라는 파일에 875 00:37:48,361 --> 00:37:49,420 그래서이 파일입니다. 876 00:37:49,420 --> 00:37:51,130 이들은 단지 전체 무리입니다 맨 위로 댓글. 877 00:37:51,130 --> 00:37:53,900 그리고 당신이 경우에보고했을 수 있습니다 당신은 제품에 주위에 찌르고. 878 00:37:53,900 --> 00:37:57,000 그러나, 그 모든 시간을 밝혀 우리는 a로 문자열을 사용하는 데 사용하는 경우 879 00:37:57,000 --> 00:38:01,130 동의어, 우리가 선언하는 방법 그 동의어이 함께했다 880 00:38:01,130 --> 00:38:03,990 유형 정의에 대한 형식 정의 키워드. 881 00:38:03,990 --> 00:38:07,500 그리고 우리는 본질적으로 말하고, 만들기 문자 스타 동의어를 문자열입니다. 882 00:38:07,500 --> 00:38:11,190 그 의미하는 스택 로 알려진이 훈련 바퀴를 생성 883 00:38:11,190 --> 00:38:12,040 문자열입니다. 884 00:38:12,040 --> 00:38:14,830 >> 지금 여기에 그냥 프로토 타입의 getchar합니다. 885 00:38:14,830 --> 00:38:17,350 우리는 전에 볼 수도 있지만, 그건 실제로 무엇을 수행합니다. getchar 886 00:38:17,350 --> 00:38:19,070 인수를 취하지없는 문자를 반환합니다. 887 00:38:19,070 --> 00:38:21,340 getdouble는, 인수를 취하지 않습니다 배를 반환합니다. 888 00:38:21,340 --> 00:38:24,440 getfloat 인수 없음 반환한다 플로트, 등등. 889 00:38:24,440 --> 00:38:27,270 getInt는 여기에 있습니다. getlonglong 여기에 있습니다. 890 00:38:27,270 --> 00:38:28,820 와 getString는 여기에 있습니다. 891 00:38:28,820 --> 00:38:29,420 그리고 그것입니다. 892 00:38:29,420 --> 00:38:33,080 이 보라색 선은 다른 처리기입니다 때문에의 지침 893 00:38:33,080 --> 00:38:35,550 그것의 시작 부분에 해시 태그. 894 00:38:35,550 --> 00:38:35,870 >> 좋아. 895 00:38:35,870 --> 00:38:38,380 그래서 지금 내가 cs50.c.에 가자 896 00:38:38,380 --> 00:38:40,400 그리고 우리는 이것에 너무 오래 얘기하지 않습니다. 897 00:38:40,400 --> 00:38:43,280 그러나 당신에게 무엇을 엿볼주는 이 모든 진행되고 898 00:38:43,280 --> 00:38:46,434 시간이 날에 가자 - 899 00:38:46,434 --> 00:38:48,250 하자 getchar 않습니다. 900 00:38:48,250 --> 00:38:51,050 그래서 getchar는 대부분 의견이다. 901 00:38:51,050 --> 00:38:52,060 그러나 다음과 같습니다. 902 00:38:52,060 --> 00:38:54,800 그래서 이것은 실제 기능입니다 우리가 있었다는 것을 getchar 903 00:38:54,800 --> 00:38:56,055 당연한 복용 존재합니다. 904 00:38:56,055 --> 00:38:59,370 우리는이 하나를 사용하지 않은 경우에도 자주하는 경우도, 그것은 최소한의 것을 905 00:38:59,370 --> 00:39:00,470 비교적 간단합니다. 906 00:39:00,470 --> 00:39:02,580 그래서 복용 가치 여기에 빠른 봐주세요. 907 00:39:02,580 --> 00:39:06,540 >> 그래서 getchar는 무한 루프가 의도적으로 그렇게 분명히. 908 00:39:06,540 --> 00:39:10,050 그런 다음 호출 - 이것은 일종의 코드의 좋은 재사용은 우리 자신이 썼다. 909 00:39:10,050 --> 00:39:11,220 그것은 getString에 호출합니다. 910 00:39:11,220 --> 00:39:12,460 그것을 무엇 때문에 문자를 얻을 수 의미? 911 00:39:12,460 --> 00:39:14,730 글쎄, 당신은뿐만 아니라를 얻기 위해 시도 할 수 있습니다 전체 사용자의 텍스트 라인 912 00:39:14,730 --> 00:39:16,940 그 하나 봐 그 문자. 913 00:39:16,940 --> 00:39:19,170 라인 60에서, 여기에 약간의 전성 검사 비트. 914 00:39:19,170 --> 00:39:21,610 getString는 null을 반환 경우, 의 진행되지 보자. 915 00:39:21,610 --> 00:39:22,820 문제가 발생했습니다. 916 00:39:22,820 --> 00:39:28,120 >> 지금이 다소 성가신하지만, 아마 C. 문자 최대 종래의 917 00:39:28,120 --> 00:39:29,960 무엇을 나타내는 지 단지 그 이름을 기반으로? 918 00:39:29,960 --> 00:39:31,670 그것은 상수이다. 919 00:39:31,670 --> 00:39:36,040 그것은의 숫자 값처럼 당신이 나타낼 수있는 문자 최대 920 00:39:36,040 --> 00:39:40,370 아마 번호 하나 물린, 가장 큰 숫자 당신이다 255, 921 00:39:40,370 --> 00:39:42,720 , 8 비트를 나타냅니다 0부터 시작. 922 00:39:42,720 --> 00:39:47,460 그래서 때,이 함수에서,이 기능을 사용했습니다 만 있기 때문에,이 코드를 작성 923 00:39:47,460 --> 00:39:51,753 뭔가 getchar 잘못된 부분이있을 때 만하면 삶의 목적이를 반환하는 것입니다 924 00:39:51,753 --> 00:39:54,830 문자, 어떻게 든 할 수 있어야합니다 해당 사용자에게 신호하기 925 00:39:54,830 --> 00:39:55,840 뭔가 잘못 됐어요. 926 00:39:55,840 --> 00:39:56,970 우리는 NULL을 반환 할 수 없습니다. 927 00:39:56,970 --> 00:39:58,480 그것은 NULL은 포인터임을 밝혀졌습니다. 928 00:39:58,480 --> 00:40:01,030 그리고 또, getchar에는 문자를 반환합니다. 929 00:40:01,030 --> 00:40:04,760 >> 그래서 대회, 뭔가 될 경우 잘못, 당신은 프로그래머, 또는에있다 930 00:40:04,760 --> 00:40:08,160 이 경우, 저 라이브러리와, 내가했다 다만, 경우 임의로 결정 931 00:40:08,160 --> 00:40:12,230 뭔가 잘못되면, 내가 갈거야 진정한 번호 255을 반환 932 00:40:12,230 --> 00:40:17,240 우리는 사용자가 입력 할 수 없음을 의미 에 의해 나타내지는 캐릭터 933 00:40:17,240 --> 00:40:21,410 우리가했기 때문에 숫자 255를 훔치는 에 소위 센티넬 값으로 934 00:40:21,410 --> 00:40:23,410 문제를 나타냅니다. 935 00:40:23,410 --> 00:40:27,010 지금은 밝혀 그 문자 255 당신이 입력 할 수있는 일이 아닙니다 936 00:40:27,010 --> 00:40:28,380 키보드, 그래서 그것은 더 큰 문제가 없습니다. 937 00:40:28,380 --> 00:40:30,910 사용자가 인식하지 않습니다 나는이 문자를 도난했습니다. 938 00:40:30,910 --> 00:40:34,620 하지만 당신은에 남자 페이지에 표시하는 경우 에 컴퓨터 시스템을 일부 참조 939 00:40:34,620 --> 00:40:38,560 말한다, 상수 같은 모두 대문자 오류이 일정한 세력에게의 경우 940 00:40:38,560 --> 00:40:42,720 반환, 그 한 모두가 어떤 인간의 년 전에 임의의로 결정했다 941 00:40:42,720 --> 00:40:45,680 이 특별한 값을 반환 그 경우 일정한 전화 942 00:40:45,680 --> 00:40:46,840 뭔가 잘못갑니다. 943 00:40:46,840 --> 00:40:48,580 >> 이제 마법은 여기로 발생합니다. 944 00:40:48,580 --> 00:40:52,600 첫째, 67 행에서 선언 해요 두 문자, C1 및 C2. 945 00:40:52,600 --> 00:40:57,080 그리고 라인 68에서, 실제로있다 연상의 코드 라인 946 00:40:57,080 --> 00:41:01,140 우리의 친구 printf는, 주어진 그것 따옴표 %의 고사가 없습니다. 947 00:41:01,140 --> 00:41:06,490 그러나 여기에서 무슨 일이 일어나고 있는지 알 수 있습니다. sscanf에서 문자열 검색을 의미합니다 - 948 00:41:06,490 --> 00:41:11,690 포맷을 스캔 의미 문자열, 에르고 sscanf에서. 949 00:41:11,690 --> 00:41:12,590 그게 무슨 뜻 이죠? 950 00:41:12,590 --> 00:41:16,310 그것은 당신이 문자열을 sscanf를 전달할 것을 의미한다. 951 00:41:16,310 --> 00:41:18,420 그리고 라인은 무엇입니다 인치 사용자 유형 952 00:41:18,420 --> 00:41:23,520 당신은 형식 문자열처럼 sscanf를 전달할 무엇 scanf와 지시하는이 953 00:41:23,520 --> 00:41:25,870 당신은 사용자가 로그인 입력했다 바라고 954 00:41:25,870 --> 00:41:29,730 그런 다음 전달 - 두의 주소 이 경우 메모리 덩어리, 955 00:41:29,730 --> 00:41:31,150 저는 두 자리를 가지고 있기 때문이다. 956 00:41:31,150 --> 00:41:34,610 그래서 나는 그것에게 주소를 줄거야 C1과 C2의 주소. 957 00:41:34,610 --> 00:41:37,700 >> 그리고 당신이 함수에게을주는 기억 어떤 변수의 주소, 무엇 958 00:41:37,700 --> 00:41:38,950 의미? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 이 함수는 결과로 무엇을 할 수 그것의 주소를주는 961 00:41:45,050 --> 00:41:48,170 변수로 반대 변수 자체? 962 00:41:48,170 --> 00:41:49,450 그것은 바로, 그것을 변경할 수 있습니까? 963 00:41:49,450 --> 00:41:53,250 당신은 사람 신체에 대한지도를 가지고 있다면 주소, 그들은 거기 가서 할 수 있습니다 964 00:41:53,250 --> 00:41:54,750 그들은 그 주소에서 원하는. 965 00:41:54,750 --> 00:41:55,800 여기에 같은 생각. 966 00:41:55,800 --> 00:41:59,950 우리는 sscanf에서 두 가지의 주소로 전달하는 경우 심지어 메모리 덩어리,이 작은 967 00:41:59,950 --> 00:42:03,585 메모리, C1과 C2의 작은 덩어​​리지만, 우리는 그것에게 그들의 주소를 알려 968 00:42:03,585 --> 00:42:05,170 sscanf를 그것을 변경할 수 있습니다. 969 00:42:05,170 --> 00:42:08,530 >> 인생에서 sscanf에서의 목적 때문에, 우리가 읽으면 매뉴얼 페이지는 읽을 수 무엇 970 00:42:08,530 --> 00:42:13,420 사용자의 입력, 가지고있는 사용자에 대한 희망 문자의 입력 및 아마 971 00:42:13,420 --> 00:42:16,470 다른 문자, 그리고 어떤 사용자 입력, 첫 번째 문자는 간다 972 00:42:16,470 --> 00:42:19,310 여기, 두 번째 문자는 간다. 973 00:42:19,310 --> 00:42:22,470 지금, 옆으로,이, 당신은 것 만 문서에서 알아 974 00:42:22,470 --> 00:42:25,570 내가 거기에 빈 공간을두고 있다는 사실 그냥 난 상관하지 않는 것을 의미하는 경우 975 00:42:25,570 --> 00:42:28,440 사용자가 스페이스 바를 몇 안타 그 또는 그녀는 소요 시간 전 976 00:42:28,440 --> 00:42:30,400 문자 나 무시하는거야 공백. 977 00:42:30,400 --> 00:42:32,510 그래서, 나는에서 알고 설명서를 참조하십시오. 978 00:42:32,510 --> 00:42:36,570 >> 두 번째 %의 C가 있다는 사실 공백 다음은 실제로 979 00:42:36,570 --> 00:42:37,410 고의적. 980 00:42:37,410 --> 00:42:41,190 내가 감지 할 수 있도록하려면 사용자 엉망 또는 협조하지 않았다. 981 00:42:41,190 --> 00:42:45,630 그래서 사용자는 입력 한 바라고 있어요 하나의 문자에, 그러므로 나는 바라고 있어요 982 00:42:45,630 --> 00:42:50,640 그 sscanf를 단지를 반환하는 것입니다 값을 1 내가 읽은 경우 다시 때문에 983 00:42:50,640 --> 00:42:55,400 문서, sscanf에서의 목적에 생명의 수를 반환하는 것입니다 984 00:42:55,400 --> 00:42:59,170 가득 차 있었다 변수 사용자 입력. 985 00:42:59,170 --> 00:43:02,270 >> 나는 두 변수에 전달 주소, C1 및 C2. 986 00:43:02,270 --> 00:43:06,420 나는 그것을하지만, 기대하고 단 하나의 그들은 죽고 있기 때문에 경우 sscanf에서 987 00:43:06,420 --> 00:43:11,130 2를 반환, 아마도 무엇 논리적 의미? 988 00:43:11,130 --> 00:43:14,600 사용자는 다만 저에게 하나를 포기하지 않았다 문자처럼 나는 그에게 혹은 그녀. 989 00:43:14,600 --> 00:43:17,860 그들은 아마로 입력 최소한 두 문자. 990 00:43:17,860 --> 00:43:22,430 내가 대신 두 번째를 가지고 있지 않은 경우 그럼 % C는, 난 그냥 하나를 가지고있는 991 00:43:22,430 --> 00:43:25,370 솔직히 더 직관적 일 것 접근, 나는 언뜻 생각, 992 00:43:25,370 --> 00:43:30,220 당신은 검색 할 수하지 않을거야 사용자가 당신에게를 제공 한 경우 993 00:43:30,220 --> 00:43:31,780 당신이 실제로 원하는 것보다 입력. 994 00:43:31,780 --> 00:43:34,100 그래서 이것은 암시 적 형태이다 오류 검사. 995 00:43:34,100 --> 00:43:35,640 >> 하지만 여기서 무엇을 알 수 있습니다. 996 00:43:35,640 --> 00:43:39,970 일단 사용자가 하나를 내게 준 확신 자, 내가하고, 선을 해제 997 00:43:39,970 --> 00:43:44,450 getString에의 반대, 차례 차례로 내가 복귀 후 malloc을 사용하고, 998 00:43:44,450 --> 00:43:51,030 C1, 내가 기대하는 문자 사용자는 제공된 만 제공. 999 00:43:51,030 --> 00:43:54,680 그래서 빨리는 얼핏하지만, getchar에 대한 질문? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 우리는 다른 사람의 일부 돌아올 것이다. 1002 00:43:59,590 --> 00:44:03,770 >> 글쎄, 내가 가서 이렇게하자 - 다만 동기를 부여하기 위해, 지금은 가정 우리 1003 00:44:03,770 --> 00:44:08,910 주 플러스 시간에 토론이 structs.h라는 파일입니다. 1004 00:44:08,910 --> 00:44:11,440 다시, 이것은 단지 맛 껀 뭔가. 1005 00:44:11,440 --> 00:44:13,090 그러나 예고하는 많은 의이 댓글이 있습니다. 1006 00:44:13,090 --> 00:44:17,440 그럼 내가 강조하게 만 지금은 흥미로운 부분. 1007 00:44:17,440 --> 00:44:18,020 형식 정의 - 1008 00:44:18,020 --> 00:44:19,700 같은 키워드는 또있다. 1009 00:44:19,700 --> 00:44:23,100 typedef는 우리가 문자열을 선언하는 데 사용 특수 데이터 유형으로. 1010 00:44:23,100 --> 00:44:27,490 당신이 새로운을 만들 typedef를 사용할 수 있습니다 존재하지 않는 데이터 유형 1011 00:44:27,490 --> 00:44:28,570 C가 발명되었다. 1012 00:44:28,570 --> 00:44:32,520 예를 들어, Int는 C. 문자와 함께 제공 C. 더블 C.와 함께 제공 함께 제공하지만, 1013 00:44:32,520 --> 00:44:34,000 학생의 아무 개념이 없습니다. 1014 00:44:34,000 --> 00:44:37,230 그럼에도 불구하고 수 꽤 유용 할 것이다 저장하는 프로그램을 작성할 수 1015 00:44:37,230 --> 00:44:40,440 변수, 학생의 ID 번호, 자신의 이름, 자신의 집. 1016 00:44:40,440 --> 00:44:42,890 즉, 세 가지 데이터, INT와 좋아 1017 00:44:42,890 --> 00:44:44,420 문자열과 다른 문자열. 1018 00:44:44,420 --> 00:44:48,220 >> 형식 정의와 함께, 어떤은 매우 강력 이 및 키워드 sturct에 대한 1019 00:44:48,220 --> 00:44:53,660 구조, 당신은, 2013 년 프로그래머, 실제로 자신을 정의 할 수 있습니다 1020 00:44:53,660 --> 00:44:57,530 년을 존재하지 않는 데이터 유형 전하지만 그 목적에 맞게. 1021 00:44:57,530 --> 00:45:01,910 그리고 여기에 19을 통해 선 13, 우리는 같은 새로운 데이터 형식을 선언하고 1022 00:45:01,910 --> 00:45:04,320 INT하지만 학생의 호출. 1023 00:45:04,320 --> 00:45:09,310 그리고 안쪽이 변수가가는 INT, 문자열 - 세 가지 수 1024 00:45:09,310 --> 00:45:09,930 그리고 문자열입니다. 1025 00:45:09,930 --> 00:45:13,040 그래서 당신이 정말로 무엇을 생각할 수 이 경우에도, 무슨 일이 일어난 1026 00:45:13,040 --> 00:45:17,160 오늘 단순화 비트, 학생은 본질적 것입니다 1027 00:45:17,160 --> 00:45:19,450 다음과 같이합니다. 1028 00:45:19,450 --> 00:45:22,580 그것의 덩어리가 될 것 ID와 메모리의 이름 1029 00:45:22,580 --> 00:45:25,580 필드 및 집 필드입니다. 1030 00:45:25,580 --> 00:45:30,670 그리고 우리는 그 덩어리를 사용하실 수 있습니다 메모리에 액세스 다음과 같습니다. 1031 00:45:30,670 --> 00:45:38,870 >> 내가 struct0.c에 가면 여기입니다 비교적 긴하지만, 다음과 같은 1032 00:45:38,870 --> 00:45:42,630 코드의 패턴이 이 새로운 트릭을 사용합니다. 1033 00:45:42,630 --> 00:45:45,790 그래서 일단, 내가 관심을 끌어 보자 맨 위로 흥미로운 부분. 1034 00:45:45,790 --> 00:45:49,670 샤프 학생 3 정의, 선언 라는 상수 학생 및 양수인 1035 00:45:49,670 --> 00:45:53,450 그것은 단지 임의의 숫자 3, 그래서 나는 사용하여 세 학생들이 1036 00:45:53,450 --> 00:45:54,830 지금이 프로그램. 1037 00:45:54,830 --> 00:45:55,960 여기에 주요 온다. 1038 00:45:55,960 --> 00:45:58,860 통보는 어떻게 선언 않는다 학생의 배열? 1039 00:45:58,860 --> 00:46:00,480 글쎄, 난 그냥 같은 구문을 사용합니다. 1040 00:46:00,480 --> 00:46:02,110 단어 학생은 분명히 새로운 기능입니다. 1041 00:46:02,110 --> 00:46:04,790 하지만, 학생, 클래스 브래킷 학생. 1042 00:46:04,790 --> 00:46:06,720 >> 그래서 불행하게도 많은있다 여기에 용어의 재사용. 1043 00:46:06,720 --> 00:46:07,660 이것은 단지 숫자입니다. 1044 00:46:07,660 --> 00:46:09,040 그래서이 세 가지를 말하는 것과 같다. 1045 00:46:09,040 --> 00:46:11,430 클래스는 내가 원하는 그냥 뭐 것입니다 변수를 호출합니다. 1046 00:46:11,430 --> 00:46:12,840 나는 학생을 호출 할 수 있습니다. 1047 00:46:12,840 --> 00:46:15,880 그러나 클래스는,이에서 클래스가 아닙니다 객체 지향 자바 종류의 방법. 1048 00:46:15,880 --> 00:46:17,220 그것은 단지 학생들의 수업입니다. 1049 00:46:17,220 --> 00:46:20,590 그리고 모든 요소의 데이터 유형 그 배열의 학생입니다. 1050 00:46:20,590 --> 00:46:23,040 그래서 이것은 조금 다르다 뭔가 말에서 1051 00:46:23,040 --> 00:46:25,250 이처럼, 그것은 단지 - 1052 00:46:25,250 --> 00:46:29,500 나는 나에게 세 학생들에게 말하는거야 그 배열 클래스를 호출합니다. 1053 00:46:29,500 --> 00:46:29,800 >> 좋아. 1054 00:46:29,800 --> 00:46:30,680 지금 여기에 네 개의 루프입니다. 1055 00:46:30,680 --> 00:46:33,480 이 남자의 잘 - 반복하는 업에 0에서 3 개. 1056 00:46:33,480 --> 00:46:35,160 여기 구문의 새 작품이다. 1057 00:46:35,160 --> 00:46:37,710 이 프로그램은 나에게 묻는거야 그것을 학생을 줄 수있는 사람, 1058 00:46:37,710 --> 00:46:39,200 int이며 ID. 1059 00:46:39,200 --> 00:46:44,650 그리고 여기 당신이 할 수있는 구문이다 에서 ID 필드에 어떤 것을 저장 1060 00:46:44,650 --> 00:46:48,630 위치 클래스 브래킷 그래서 난 이 구문은 새로운 것이 아니다. 1061 00:46:48,630 --> 00:46:51,450 이것은 단지 나에게 여덟째을주는 의미 클래스의 학생. 1062 00:46:51,450 --> 00:46:52,940 하지만이 기호는 새로운 기능입니다. 1063 00:46:52,940 --> 00:46:56,320 지금까지, 우리는 점을 사용 할 수있어 다음과 같은 최소한의 코드입니다. 1064 00:46:56,320 --> 00:47:01,490 의미로 알려진 구조체로 이동 학생 뭔가를 넣어. 1065 00:47:01,490 --> 00:47:05,670 마찬가지로,이 다음 줄에, 31 일 이동 미리 넣어 어떤 사용자 유형 1066 00:47:05,670 --> 00:47:10,530 여기에 이​​름과 그들이 위해 할 집 같은 것, 가서 1067 00:47:10,530 --> 00:47:13,230 . 집에 넣어. 1068 00:47:13,230 --> 00:47:15,955 >> 그래서이 프로그램은 무엇을합니까 궁극적으로합니까? 1069 00:47:15,955 --> 00:47:17,220 당신은 거기에 약간의 맛보기를 볼 수 있습니다. 1070 00:47:17,220 --> 00:47:24,780 내가 가서 구조체 0을하자 점 슬래시 구조체 0, 학생의 ID 1, 1071 00:47:24,780 --> 00:47:28,250 데이비드 메이, 학생 ID 2를 말한다. 1072 00:47:28,250 --> 00:47:32,070 롭 커크 랜드, 학생 ID 3. 1073 00:47:32,070 --> 00:47:35,010 로렌 Leverit - 1074 00:47:35,010 --> 00:47:38,380 이 프로그램은 한 유일한 것은, 이는 단지 완전히 임의입니다 1075 00:47:38,380 --> 00:47:40,980 나는이 데이터로 뭔가를하고 싶어 내가 방법을 우리에게 가르쳐있어 지금 그 1076 00:47:40,980 --> 00:47:43,450 구조체를 사용, 난 그냥했다입니다 여기에이 여분의 루프. 1077 00:47:43,450 --> 00:47:45,260 나는 학생의 배열을 반복. 1078 00:47:45,260 --> 00:47:49,170 나는 우리, 아마도 지금은 익숙한 친구가 사용 문자열로 stircomp 비교 1079 00:47:49,170 --> 00:47:53,780 검사는 8 학생의 집 메이 같음? 1080 00:47:53,780 --> 00:47:56,760 그리고 만약 그렇다면, 뭔가를 인쇄 임의 좋아, 그래, 그것은이다. 1081 00:47:56,760 --> 00:47:59,430 그러나 다시, 다만 저에게 기회를주는 및을 사용하여 재사용 1082 00:47:59,430 --> 00:48:02,270 이 새로운 점 표기법을 재사용 할 수 있습니다. 1083 00:48:02,270 --> 00:48:03,250 >> 그래서 사람은 바로, 무슨 상관이야? 1084 00:48:03,250 --> 00:48:06,270 학생 프로그램과 함께 오는 것은 다소 임의의,하지만 밝혀 1085 00:48:06,270 --> 00:48:09,800 우리와 함께 유용한 일을 할 수있는 이 예를 들면 다음과 같습니다. 1086 00:48:09,800 --> 00:48:14,600 이것은 훨씬 더 복잡한 구조체입니다 C에서 그것은 다스 필드를 더 있어요 1087 00:48:14,600 --> 00:48:15,880 다소 암호화 방식 지명했다​​. 1088 00:48:15,880 --> 00:48:20,110 그러나 당신은 그래픽 들었어요 경우 비트 맵이라는 파일 형식 BMP, 그 1089 00:48:20,110 --> 00:48:22,830 밝혀 그 비트 맵 파일 형식 꽤 많은이 그렇게 보인다. 1090 00:48:22,830 --> 00:48:24,200 그것은 멍청한 웃는 얼굴이다. 1091 00:48:24,200 --> 00:48:27,840 내가을 확대했던 작은 이미지의 꽤 큰에 나는 서로를 볼 수 있도록 1092 00:48:27,840 --> 00:48:30,410 개별 점 또는 픽셀. 1093 00:48:30,410 --> 00:48:33,800 우리를 나타낼 수 있습니다 밖으로 지금, 그것은집니다 숫자 0, 말, 검은 점. 1094 00:48:33,800 --> 00:48:35,520 숫자 1과 흰색 점. 1095 00:48:35,520 --> 00:48:39,140 >> 그래서 다른 말로하면, 당신이 원하는 경우를 그리는 방법 웃는 얼굴에서 해당 이미지를 저장 1096 00:48:39,140 --> 00:48:42,680 컴퓨터는 0을 저장하고 충분 다음과 같이 것, 어디서, 1097 00:48:42,680 --> 00:48:45,250 다시, 사람은 백색이다 과 제로는 검은 색입니다. 1098 00:48:45,250 --> 00:48:48,290 과 함께, 당신은 효과적으로있을 경우 1과 0의 조롱, 당신은이 1099 00:48:48,290 --> 00:48:51,030 픽셀 격자, 당신은 누워 경우 그들을 밖으로, 당신은 사랑이 1100 00:48:51,030 --> 00:48:52,560 작은 웃는 얼굴. 1101 00:48:52,560 --> 00:48:58,150 이제, 비트 맵 파일 형식, BMP는,이다 효과적으로 후드 아래, 1102 00:48:58,150 --> 00:49:00,970 하지만 더 많은 픽셀 SOT 함께하는 당신 실제로 색상을 나타낼 수 있습니다. 1103 00:49:00,970 --> 00:49:05,170 >> 하지만 당신은 더 정교한있을 때 BMP 및 JPEG 및 GIF와 같은 파일 형식 1104 00:49:05,170 --> 00:49:09,360 하는 당신은, 익숙한 될 수 있습니다 디스크에 파일을 일반적으로뿐만 아니라, 1105 00:49:09,360 --> 00:49:13,760 0과 1 픽셀에 대한 것들을 가지고 있지만, 그들은뿐만 아니라 일부 메타 데이터가 - 1106 00:49:13,760 --> 00:49:16,960 정말없는 의미에서 메타 데이터 만 가지고 유용합니다. 1107 00:49:16,960 --> 00:49:21,370 그래서 여기이 필드는 암시하고있다 우리는 P-세트에서 더 자세하게 볼 수 있습니다 1108 00:49:21,370 --> 00:49:25,810 5 그 0과 그 전에 , 이미지의 픽셀을 나타냅니다 1109 00:49:25,810 --> 00:49:29,110 메타 데이터의 무리처럼 거기 이미지의 크기와 1110 00:49:29,110 --> 00:49:30,250 이미지의 폭. 1111 00:49:30,250 --> 00:49:32,910 그리고 난 몇 가지를 따 버릴거야 알 여기에 임의의 것들 - 1112 00:49:32,910 --> 00:49:34,260 폭과 높이입니다. 1113 00:49:34,260 --> 00:49:36,160 비트 수와 몇 가지 다른 것들. 1114 00:49:36,160 --> 00:49:37,840 그래서 파일에 일부 메타 데이터가있다. 1115 00:49:37,840 --> 00:49:41,470 >> 그러나 파일을 배치하는 방법을 이해하여 이 방법에서 밖으로, 당신은 실제로 수 1116 00:49:41,470 --> 00:49:45,890 다음 이미지를 조작, 이미지를 복구 디스크에서 이미지 크기를 조정합니다. 1117 00:49:45,890 --> 00:49:47,560 하지만 당신은 반드시 할 수 없습니다 을 향상시킬 수 있습니다. 1118 00:49:47,560 --> 00:49:48,480 나는 사진을 필요로했다. 1119 00:49:48,480 --> 00:49:52,840 그래서 당신이 본 사람, 여기 RJ으로 돌아 갔다 꽤 시간 전 화면. 1120 00:49:52,840 --> 00:49:57,160 여기 기조를 열고 있다면,이는 당신은 무엇을 확대하려고하면 발생하고 1121 00:49:57,160 --> 00:49:59,380 RJ을 향상시킬 수 있습니다. 1122 00:49:59,380 --> 00:50:01,480 그는 정말 더 나은 점점 아니에요. 1123 00:50:01,480 --> 00:50:06,240 지금 기조가 모호의 종류 조금 그냥 얼버무리고하기 1124 00:50:06,240 --> 00:50:11,040 RJ 특히하지 않는다는 사실 당신이 확대 강화 1125 00:50:11,040 --> 00:50:13,310 그리고이 방법을 수행하는 경우, 사각형을 참조하십시오? 1126 00:50:13,310 --> 00:50:15,490 네, 당신은 확실히 볼 수 있습니다 프로젝터의 사각형. 1127 00:50:15,490 --> 00:50:17,690 >> 그게 당신이 개선 할 때 무엇을 얻을. 1128 00:50:17,690 --> 00:50:22,570 그러나 이해하는 방법 우리 RJ 또는 웃는 얼굴이 구현되는 것은 우리에게 드릴 것입니다 1129 00:50:22,570 --> 00:50:24,950 실제로 조작하는 코드를 작성 이러한 확인해보세요. 1130 00:50:24,950 --> 00:50:29,970 그리고 함께,이 주에 끝날 줄 알았는데 55 초, 그건 향상 1131 00:50:29,970 --> 00:50:31,230 나는 오히려 잘못된 말 하다니. 1132 00:50:31,230 --> 00:50:32,990 >> [동영상 재생] 1133 00:50:32,990 --> 00:50:34,790 >> - 거짓말이야. 1134 00:50:34,790 --> 00:50:38,310 무엇에 대해, 나도 몰라. 1135 00:50:38,310 --> 00:50:41,200 >> - 그래서 우리는 무엇을 알 수 있습니까? 1136 00:50:41,200 --> 00:50:45,280 >> - 그 9시 15분 레이 산토시 ATM했다. 1137 00:50:45,280 --> 00:50:47,830 >> - 그래서 질문은 무엇인가 그는 9:16에서 일했다? 1138 00:50:47,830 --> 00:50:50,750 >> - 촬영 아홉 밀리미터 뭔가. 1139 00:50:50,750 --> 00:50:52,615 어쩌면 그는 저격수를 보았다. 1140 00:50:52,615 --> 00:50:54,760 >> - 또는 그와 함께 작업 하였다. 1141 00:50:54,760 --> 00:50:56,120 >> - 기다립니다. 1142 00:50:56,120 --> 00:50:57,450 하나를 뒤로 이동합니다. 1143 00:50:57,450 --> 00:50:58,700 >> - 어떻게 볼 수 있습니까? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> 전체 화면으로 자신의 얼굴을 최대로 만듭니다. 1146 00:51:09,490 --> 00:51:09,790 >> - 그의 안경. 1147 00:51:09,790 --> 00:51:11,040 >> -이 반사입니다. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> - 그게 Neuvitas 야구 팀이다. 1150 00:51:23,520 --> 00:51:24,530 그건 자신의 로고입니다. 1151 00:51:24,530 --> 00:51:27,040 >> - 그리고 그는 누군가와 얘기 그 재킷을 입고. 1152 00:51:27,040 --> 00:51:27,530 >> [END 동영상 재생] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. 마란 :이됩니다 문제 5 세트합니다. 1154 00:51:29,180 --> 00:51:30,720 우리는 다음 주에 볼 수 있습니다. 1155 00:51:30,720 --> 00:51:32,330 >> 남성 SPEAKER : 다음 CS50에서. 1156 00:51:32,330 --> 00:51:39,240 >> [귀뚜라미 지저귐] 1157 00:51:39,240 --> 00:51:41,270 >> [음악 연주]