ROB 보덴은 : 안녕하세요, 저는, 롭 보우 덴 해요 과의이 quiz0 대해 얘기하자. 그래서 첫 번째 질문. 이는 질문 어디 해당 번호를 코딩하는데 필요한 이진 전구 127. 당신이 원하는 경우에, 당신은 할 수 일반 변환을 수행 소수의 이진, bi-- 또는에서. 그러나 그것은 아마거야 시간이 많이 걸릴 수 있습니다. 난 당신이 알아낼 수있는, 의미, OK, 1, 거기에, 2가에 있습니다 4가에서 8가에 있습니다. 쉬운 방법은, (127)는 128을 뺀 것입니다. 즉, 가장 왼쪽에있는 전구는 128 비트입니다. 그래서 127은 모든 정말 다른 전구, 즉, 왼쪽은 이후 전구 1을 뺀. 즉 그 질문은 여기까지. 질문 하나. 3 비트 그래서 당신은 할 수 있습니다 8 고유 한 값을 나타냅니다. 그렇다면 왜 가장 큰 음이 아닌 7 당신이 나타낼 수있는 소수의 정수? 음, 만약에 우리는 할 수 있습니다 8 고유 한 값을 나타냅니다, 그 다음 우리가 될거야 표현하면 0부터 7까지입니다. 0의 값 중 하나를 차지한다. 질문 두 가지. n 비트와, 얼마나 많은 별개 값은 대표 할 수 있는가? 따라서, n 비트와 함께, 당신은 2가 각 비트에 사용할 수있는 값. 그래서 우리는이 가능한 값을 첫 번째 비트, 2 사용할 수있는 값 초, 2 세 번째 가능합니다. 그리고 그건 2 회 2 회 2, 결국 답은 N 2이다. 질문 세. 이진 0 × 50은 무엇입니까? 그래서 16 진수 매우있다 기억 이진 간단 변환. 그래서 여기, 우리는 볼 필요가 (5)와 독립적으로 0. 그래서 진 5 무엇인가? 0101, 즉 1 비트와 4 비트입니다. 진 0 무엇입니까? 까다로운 없습니다. 0000. 그러니 그들을 함께 넣어 즉 바이너리의 전체 숫자입니다. 01010000. 당신이 원하는 경우 그리고 당신은 할 수 그 왼쪽에 제로를 벗어. 그것은 무관​​합니다. 그럼 대안 진수의 0 × 50은 무엇입니까? 당신이 원하는 경우라면, 당신은 나랑 ... 이진 더 편안하게, 당신은 바이너리 대답을 취할 수 그리고 소수에 그 변환합니다. 또는 우리는 기억할 수 그 진수. 0 있도록하면 0 번째 위치에 있고 도 5는 제 1 장소 (16)에있다. 그래서 여기, 우리는 5 번 (16)가 먼저, 제로 플러스 0 시간 16 80입니다. 그리고 당신은 보았다 경우 질문에 대한 제목, 그것은 가지였다 CS (80)이었다 이 문제에 대한 답에 힌트. 질문 다섯. 우리는 인이 스크래치 스크립트가 4 회 땅콩 버터 젤리를 반복합니다. 그래서 우리가 어떻게 C 코드 지금 무엇입니까? 음, 우리는 이곳에에게 굵은 글씨 부분이 당신이 구현할 수 있었던 유일한 부분입니다. 그래서 우리는 4 반복있어 4 루프가 배, printf와 보내고 땅콩 버터 젤리, 새로운 라인의 문제는 요청으로. 질문 여섯, 다른 스크래치 문제. 우리는 우리가 영원히 루프에있는 것을 알 수있다. 우리는 변수 내가 말을하는지 다음 1 I를 증가. 이제 우리는 C.에 있다는 것을 수행 할 우리가 이것을 할 수 있었던 여러 가지 방법. 여기에 우리가 코딩하는 일이 동안 (TRUE)로 영원히 루프. 그래서 우리는, 변수를 내가 선언 같은 우리는 스크래치에 변수 나 있었다. i 변수를 선언하고 영원히 (TRUE) 동안, 우리는 i 변수를 말한다. printf의 % 전 ... 또는 % d를 사용했습니다 수 있도록. 우리는 그 변수 말을하고, 다음 증가, 내가 ++. 질문 일곱. 이제 우리는 매우 비슷한 작업을 수행 할 마리오 점 C의 문제에서 하나를 설정합니다. 우리는이 해시 태그를 인쇄하려면, 우리는 다섯을 인쇄하려면 이 해시의 세 가지 사각형으로. 그래서 우리는 어떻게 그렇게 할거야? 음, 우리는 당신에게 전체를 제공 코드의 무리, 그리고 단지 인쇄 그리드 기능을 작성해야합니다. 그래서 PrintGrid이 생겼을까? 그럼 당신은 지나서 폭과 높이입니다. 그래서 우리는 외부를 4 루프, 즉 반복이야 이것의 모든 행 이상 우리가 인쇄 할 그리드. 그런 다음 우리는 간 중첩 된 4 루프가 즉, 각각의 컬럼을 통해 인쇄합니다. 그래서 각 행에 대해, 우리의 인쇄 각 열, 하나의 해시. 그 다음 행의 끝에서 우리가 인쇄 하나의 새로운 라인은 다음 행으로 이동합니다. 그리고 전체 그리드를합니다. 질문 여덟. PrintGrid 같은 기능을 말한다 수익을 부작용이 있지만 값. 차이를 설명한다. 그래서 당신이 기억에 의존 부작용은 무엇. 음, 반환 value-- 우리는 PrintGrid하지 않습니다 알고 이후, 리턴 값을 가지고 바로 여기에이 무효 말한다. 무효 반환 그래서 아무것도 정말 아무것도 반환하지 않습니다. 그래서 부작용은 무엇입니까? 음, 부작용이다 종류의 지속 아무것도 기능이 종료 된 이후에 즉, 단지 반환되지 않았습니다 그리고 그것은 단지 입력에서 아니었다. 따라서, 예를 들어, 우리는 수도 전역 변수를 변경합니다. 이는 부작용이 될 것이다. 특히이 경우에있어서, 매우 중요한 부작용 화면에 인쇄됩니다. 그래서 부작용은 그 PrintGrid가 있습니다. 우리는 화면에이 일을 인쇄 할 수 있습니다. 그리고 당신은 생각할 수 그 부작용으로서, 그 뭔가는 이후 그 이 기능 종료 후 지속. 즉, 범위 이외의 뭔가 이 기능의 궁극적 변경되고, 화면의 내용. 질문 아홉. 아래의 프로그램을 고려 하는 행 번호에 추가되었습니다 토론을 위해. 이 프로그램에 그래서 우리는 단지입니다 이를 저장하여 GetString 호출 이 변수의 한 다음 그 변수의 인쇄. 확인을 클릭합니다. 선 하나가있는 그래서 설명한다. #INCLUDE CS50 도트 시간. 왜 우리는 CS50 도트 시간을 인클루드해야합니까? 그럼 우리가 전화하는거야 기능을하여 GetString, 및하여 GetString 정의된다 CS50 라이브러리. 우리가 작성하지 않은 경우 #INCLUDE CS50 도트 H, 우리는 암시 적 선언을 얻을 것이다 하여 GetString 기능 오류 컴파일러에서. 그래서 우리는 library--를 포함해야 우리는 헤더 파일을 포함해야합니다, 그렇지 않으면 컴파일러는하지 않습니다 하여 GetString의 존재를 인식하고 있습니다. 라인 두 가지가 존재하는 이유를 설명한다. 그래서 표준 IO 도트 시간. 그것은 정확히 같은 야 이전의 문제로서, 대신 다루는 제외 하여 GetString, 우리는 printf의에 대해 얘기하고. 우리는 우리가해야 할 말을 작성하지 않은 경우 표준 IO 도트 H를 포함하는, 우리는 할 수 없을 것이다 printf 함수를 사용하려면, 컴파일러 때문에 그것에 대해 알고하지 않을 것이다. 하고 똑똑한 중요성은 무엇인가 의 4 번에 무효? 그래서 여기에 우리가 INT 주 (무효)를 가지고있다. 그건 그냥 우리 말 것 명령 줄을받지된다 주요 인수. 우리가 INT 말할 수 있음을 기억하십시오 주요 INT는 argc 문자열 argv와 브래킷. 그래서 여기에 우리는 우리 말을 무효라고 명령 줄 인수를 무시합니다. 정확하게, 메모리에 대하여, 설명한다 라인에서 무엇을하여 GetString 여섯 돌아갑니다. 하여 GetString는 블록을 반환 메모리, 문자의 배열. 정말 반환 것 첫 번째 문자의 포인터. 문자열이 문자 스타임을 기억하십시오. 그래서들 제에 대한 포인터이며 문자는 어떤에서 문자열입니다 사용자가 키보드로 입력하는 것이. 그리고 메모리는 malloc으로 할당 될 일이, 그래서 메모리는 힙에있다. 질문 13. 아래의 프로그램을 고려하십시오. 그래서이 모든 프로그램을하고있다 10로 나눈 1의 printf 보내고있다. 따라서 컴파일 때 실행,이 프로그램 출력 0.0, 비록 10로 나눈 1은 0.1입니다. 그래서 왜 0.0인가? 음,이 때문에입니다 정수 부문. 따라서도 1은 정수 10은 정수이다. 그래서 1 ~ 10, 모든 나눈 정수로 처리됩니다, 및 C에서, 우리는 정수 나눗셈을 수행 할 때, 우리는 어떤 소수점을 절단. 그래서 1 ~ 10입니다 구분 0을 입력 한 다음 우리는 노력하고 그래서, float로서 그를 인쇄 float로서 인쇄 제로는 0.0입니다. 우리는 0.0을받을 이유입니다. 아래의 프로그램을 고려하십시오. 이제 우리는 0.1을 인쇄하고 있습니다. 그래서없는 정수 나누기, 우리는 단지 0.1를 인쇄하는 그러나 우리는 그것을 인쇄하는 28 소수점 자리에. 그리고 우리는이 0.1000, 왕창 얻을 제로의, 5 5 5, 어쩌구 저쩌구. 그것을 않습니다 그래서 여기에 질문입니다 대신 정확히 0.1의 것을 인쇄? 그래서 여기에 그 이유는 지금 포인트 부정확 부동. 플로트는 32 비트 기억하십시오. 그래서 우리는 단지 한정된 수를 나타낼 수 있습니다 들 (32)의 부동 소수점 값 비트. 그럼 궁극적으로 무한히있다 많은 부동 소수점 값, 부동 무한히 많은있다 0과 1 사이의 점수 값, 우리는 분명히 할 수있어 보다 더 많은 값을 나타냅니다. 그래서 우리는에 희생을해야 대부분의 값을 표시 할 수 있습니다. 그래서 0.1과 같은 값, 분명히 우리는 그것을 정확하게 나타낼 수 없습니다. 그래서 그 대신 0.1을 대표하는 우리는 할 가장 좋은 우리는이 0.100000 5 5를 나타낼 수 있습니다 5. 그리고는, 아주 가까이 있지만, 많은 응용 프로그램에 대한 당신에 대해 걱정할 필요가 포인트 부정확 부동 우리가 대표 할 수 없기 때문에 모든 정확히 포인트를 부동. 질문 15. 아래의 코드를 살펴 보자. 우리는 1 플러스 1을 인쇄하고 있습니다. 그래서 여기에 속임수가 없다. 1 더하기 1은 2로 평가하고, 우리는 인쇄하고 있습니다. 이것은 단지 2를 인쇄합니다. 질문 16. 이제 우리는 문자를 인쇄하는 1 더하기 문자 1. 왜이되지 않습니다 같은 일을 인쇄? 그럼 문자 1을 더한 문자 도 1은, 캐릭터 (1)는 ASCII 값 (49)을 갖는다. 그래서 정말 49 말하는 플러스 49, 및 궁극적으로이 98를 인쇄 할 것입니다. 그래서이 둘을 인쇄하지 않습니다. 질문 17. 구현을 완료 같은 방법으로 아래의 홀수 함수는 다음의 경우에 true를 반환 n이 짝수 경우 n은 홀수 및 false입니다. 이것은 좋은 목적 모드 연산자. 그래서 우리는 우리의 인수 N을, n 개의 모드 2가 아니라 1에 해당하는 경우 즉 N 나눈 것을 의미한다 2 나머지를했다. n은 2로 나눈 경우, 나머지를했다 그 n은 홀수, 그래서 우리는 true를 돌려 것을 의미한다. 그렇지 우리는 false를 반환. 또한이 같음을 모드 N 할 수 있었다 제로는, 다른, false를 돌려 true를 반환. 아래의 재귀 함수를 생각해 보자. n은 그래서 만약보다 작거나 1 반환, 1 인, N 마이너스 1의 F 그렇지 않은 경우 n 번. 이 함수는 무엇인가? 음,이 단지이다 계승 기능. 이 멋지게 표현된다 n 개의 요인으로. 그래서 지금 19 질문, 우리는 원하는 이 재귀 함수를 취할. 우리는 반복하고 싶다. 그렇다면 우리가해야합니까? 그럼 직원 이 솔루션은 다시 거기 당신이 할 수 있었던 여러 가지 방법 우리는이 INT 제품과 함께 시작하는 것이 1과 같다. 그리고이 전역 루프, 우리는거야 궁극적으로에 제품을 곱합니다 완전 요인으로 끝날. 인터넷 용 내가 2 동일 그래서입니다 보다 작거나 N과 동일, 내가 ++. 내가 2에 해당하는 이유를 궁금해 할 수 있습니다. 음, 우리가 가지고 여기에 기억 우리의 기본 케이스가 정확한지 확인하십시오. n이보다 작거나 같으면 그래서 1, 우리는 1을 반환하고 있습니다. 내가 2와 동일한에서 여기 그래서, 우리는 시작합니다. 그럼 난 1 인 경우 다음 엥 또는 n은 루프 후 1 인 경우 전혀 실행되지 않을 것입니다. 그래서 우리는 단지 것 1 반환 제품. 마찬가지로, 만약 n은 있었다 보다 아무것도 더 적은 1-- 이 0이었다 음수 1, whatever-- 우리는 여전히 1을 반환 할 것 이는 정확히 무엇이다 재귀 버전은하고있다. 이제, n은 크면 1보다, 우리는거야 적어도 하나를 수행합니다 이 루프의 반복. 그럼 우리는 거니까, n은 5 가정 해 봅시다 제품 시간을 할 예정은 2와 같습니다. 그래서 지금 제품은 2입니다. 이제 우리가 할거야 제품 시간은 3과 같다. 지금은 6입니다. 제품 시간은 지금 24의 4와 동일합니다. 제품 시간이 지금은 120의 5에 해당. 그럼 궁극적으로, 우리는 반환하고 정확하게 5 요인이다 (120). 질문 20. 이것은 당신이 작성해야 하나 지정된 알고리즘이 표에서 우리가 본 적이 아무것도, 그 이러한 알고리즘 실행에 맞는 시간이 점근 실행 시간. 그래서 알고리즘은 무엇입니다 1 오메가,하지만 N의 큰 O입니다? 무한히있을 수 여기에 많은 답변. 우리는 아마 가장 본 적이 한 자주 단지 선형 검색입니다. 최상의 경우에 따라서 시나리오, 우리가하고있는 항목 찾는 것은에있다 목록의 시작 그래서 1 단계 오메가, 우리가 확인 먼저, 우리는 즉시 반환 것을 우리는 항목을 발견했다. 최악의 시나리오에서, 항목은 끝에 또는 항목 전혀 목록이 아니다. 그래서 우리는 검색해야 전체 목록, 모든 N 요소, 그것은 N의 O를 이유입니다. 그래서 지금은 모두 무언가이다 N 로그 n의 오메가, 및 N 로그 n의 큰 O. 그럼 가장 관련 일 우리는 여기에서 보이는 종류로 병합했습니다. 그래서 일종의 기억 병합, 궁극적으로 THETA입니다 세타가 정의 된 n 개의 로그 n 인 오메가 큰 O는 모두 동일합니다. 두 N 로그 n. 오메가는 뭔가는 무엇인가 N, 그리고 N의 O 제곱? 음, 다시 거기 여러 가능한 답변. 여기에서 우리는 거품 정렬 말을하는 일. 삽입 정렬은 여기에 작동합니다. 그 거품 정렬을 기억 그 최적화 곳이 있습니다, 당신이 얻을 수있는 경우 전체 목록을 할 필요없이 어떤 스왑, 다음, 잘, 우리는 즉시 그것을 반환 할 수 있습니다 이 목록은 우선 분류되었다. , 최상의 시나리오에 따라서 그것은 N의 단지 오메가입니다. 그냥 멋지게 아니라면 로 시작하는 목록을 분류 우리는 N의 O는 스왑 제곱 있습니다. 그리고 마지막으로, 우리는 선택의 종류가 n은 제곱을 위해, 오메가 큰 O. 모두 질문 21. 정수 오버 플로우는 무엇입니까? 음 다시 앞서와 마찬가지로, 우리는 유한 한 많은 비트가 정수를 나타내는, 그래서 아마 32 비트. 의 우리가 부호있는 정수 있다고 가정 해 봅시다. 그리고 궁극적으로 가장 높은 양수 우리는 나타낼 수 2에 31에서 1을 뺀. 우리가하려고하면 어떤 일이 발생 그 정수를 증가? 음, 우리는 31에 2에서 갈거야 마이너스 1, 아래 음이 모든 방법 31. 그래서이 정수 오버 플로우입니다 당신이 증가 지킬 때, 궁극적으로 당신은 할 수 없습니다 더 높은하고 그냥 가져 다시 모든 방법을 래핑 음의 값에 약. 버퍼 오버 플로우는? 그래서 버퍼 overflow-- 버퍼가 무엇인지 기억. 그것은 메모리의 단지 덩어리입니다. 배열과 같은 버퍼입니다. 그래서 버퍼 오버 플로우 할 때입니다 당신은 메모리에 액세스하려고 그 배열의 끝을 넘어. 당신이이 경우에 따라서 크기 5, 당신의 배열 배열 브래킷에 액세스하려고 5 브래킷 6 브래킷 (7), 이상 또는 아무것도 단부, 또는 아무것도 below-- 배열 브래킷 부정적인 1-- 이들 모두는 버퍼 오버 플로우이다. 당신은 나쁜 방법으로 메모리를 터치하고 있습니다. 질문 23. 당신이 필요로하는이 하나 그래서 strlen 함수를 구현합니다. 그리고 우리는 당신이 할 수 있음을 알 S가 null되지 않습니다 가정, 그래서 당신은 필요 없어 널 (null)에 대한 검사를 수행. 그리고 여러 가지 방법이 있습니다 당신이 이것을 할 수 있었다. 여기에서 우리는 그냥 간단을. 우리는 N, 카운터로 시작합니다. n은 얼마나 많은 문자 카운트. 그래서 우리는 0에서 시작하고, 전체 목록을 반복. 동일의 브래킷 0 널 (NULL) 종료 문자? 우리가 찾고 기억 널 (NULL) 종료 문자 우리의 문자열 시간을 결정합니다. 즉 종료 할 것입니다 모든 관련 문자열입니다. 그래서의 브래킷과 동일 0 널 (NULL) 종료에? 그렇지 않을 경우, 우리는에 갈거야 S 브래킷 1, S 브라켓 2 봐. 우리는 우리까지가는 ​​계속 널 (NULL) 종료를 찾을 수 있습니다. 우리가 그것을 발견했다면, 다음 n은 포함 문자열의 총 길이, 우리는 단지 그것을 반환 할 수 있습니다. 질문 24. 그래서 이것은 하나입니다 당신 무역을 확인해야합니다. 그래서 한 것은 하나의 좋은 하지만 어떤 방법으로 방법은 나쁘다? 그래서 여기, 병합 정렬 경향 거품 정렬보다 더 빠르게합니다. 거기에 잘 거저 가졌 복수 응답이 여기에 있습니다. 그러나 주 하나는 거품 일종이다 정렬 된 목록에 대한 N의 오메가입니다. 우리가 이전에 보았던 그 테이블을 기억하십시오. 그래서 거품의 오메가 정렬 n은 최상의 시나리오 그냥 가서 할 수있어입니다 목록은 한 번 결정 이봐,이 점은 이미 정렬 및 반환. 상관없이, 일종의 병합하지 무슨 당신이 할, N 로그 n의 오메가입니다. 정렬 된 목록, 거품 그래서 종류 빠를거야. 이제 목록을 무엇에 대한 연결된? 그래서 연결리스트는 성장하고 축소 할 수 있습니다 필요한만큼의 요소에 맞게. 그래서 ... 그 얘기도 가졌 보통 직접 비교 링크 될 것입니다 배열을 나열합니다. 그래서 심지어 배열 할 수 있지만 쉽게 성장하고 축소 많은 요소에 맞게 필요에 따라리스트를 링크 array--의 비교 배열은 랜덤 액세스 할 수 있습니다. 우리는 어떤으로 인덱스를 수 배열의 특정 요소입니다. 그래서 링크 된 목록, 우리는 할 수 없습니다 단지 다섯 번째 요소로 이동 우리는 처음부터 통과 할 우리는 다섯 번째 요소에 도달 할 때까지. 그리고 그 걸 막을 수 있을까요 이진 검색과 같은 일을하고. 이진 검색의 말하기, 이진 검색 선형 탐색보다 빠르게되는 경향이있다. 거저 가졌 그래서, 하나의 가능한 것 바이너리 할 수​​ 없다는 것입니다 연결리스트를 검색, 당신은 단지 배열에 그것을 할 수 있습니다. 그러나 아마도 더 중요한 것은, 당신은 이진 검색을 수행 할 수 없습니다 정렬되지 않은 배열. 선행을 정렬해야 할 수도 있습니다 배열, 오직 다음 수 당신은 이진 검색을 수행. 당신의 일이 아닌 경우 그래서 처음부터 정렬, 다음 선형 검색이 더 빠를 수 있습니다. 질문 27. 그래서 아래의 프로그램을 고려, 이는 다음 슬라이드에있을 것입니다. 그리고 이것은 우리가하고있는 일입니다 명시 적으로 언급 할 것 다양한 변수에 대한 값. 그럼 그 살펴 보자. 그래서 하나의 라인. 우리는 INT의 x는 1과 동일합니다. 즉 일어난 유일한 것이다. 그래서 라인 하나에, 우리는에서 볼 우리의 테이블, 즉 Y, a, b 및 TMP는 모두 기절. 그래서 X는 무엇인가? 그런데 우리는 그냥 1과 동일하게 설정. 그리고, 물론, 두 라인 우리는, y를 2로 설정된 것을 알 테이블은 이미 우리를 위해 채워. 그래서 x는 1이고 y는 2입니다. 이제, 라인 세, 우리는 지금이야 스왑 기능 내부. 우리는 스왑 통과 했습니까? 우리는 앰퍼샌드의 X를 통과 B에 대한, 그리고 앰퍼샌드 Y. 어디에 문제 이전 언급 된 그 x의 주소 은 0x10이며, Y의 주소 0x14로이다. 따라서 A와 B는 동일하고 각각을 0x10과 0x14에. 이제 세 번째 줄에서 x와 y는 무엇인가? 음, 아무것도 변경되었습니다 이 시점에서 x와 y에 대해. 심지어 그들이있어하지만 주요 스택 프레임 내부, 그들은 여전히​​ 동일한 가질 값은 이전했다. 우리는 어떤 메모리를 수정하지 않았습니다. 그래서 x는 1이고, Y는 2입니다. 좋아. 그래서 지금 우리는 별표와 같다 INT의 tmp 말했다. 그래서 4 번, 모두에서 tmp를 제외하고 동일하다. 우리는 어떤 값을 변경하지 않은 TMP를 제외하고 아무것도. 우리는 별표와 같다 TMP를 설정한다. 스타는 무엇입니까? 음, 포인트는 X에, 그래서 스타 1과 동일한 X,에 것입니다. 그래서 모든 복사 아래로, 및 TMP는 1로 설정됩니다. 이제 다음의 행. 스타는 스타 B와 동일합니다. 그래서 라인으로 five-- 아니라 다시, 모든 스타 뭐든 제외한 동일하다. 스타는 무엇입니까? 음, 우리는 스타가 X 말했다. 그래서 우리는 동일한 스타 B X를 변경하고 있습니다. 스타 B는 무엇입니까? Y. Y에 B 지점. 그래서 스타 B는 Y입니다. 그래서 우리는 X와 Y 동일하게 설정하고 그리고 나머지는 동일합니다. x는 지금이다 그래서 우리는 다음 행에 표시 2, 나머지는 아래로 복사됩니다. 이제 다음 줄에, 스타 B는 TMP 같습니다. 음, 우리는 스타 B가 Y 말했다, 그래서 우리는 TMP에 y를 동일하게 설정하고 있습니다. 다른 모든 사항은 동일 그래서 모든 것이 아래로 복사됩니다. 우리는 인, tmp를 위해 동일한 Y를 설정하고 다른 하나, 모든 것이 동일합니다. 이제 마지막으로, 라인 일곱. 우리는 다시 주요 기능에있어. 스왑이 완료된 후 우린. 우리는 A, B를 잃었으며,이 TMP하지만 궁극적으로 어떤 값을 변경하지 않는 이 시점에서 아무것도, 우리는 x와 y의 아래로 복사합니다. 그리고 우리는 x와 y가 있음을 알 지금 2과 1 대신 1, 2. 스왑이 성공적으로 실행하고있다. 질문 28. 당신이 발생한다고 가정 오류 메시지 근무 시간 이하 CA 또는 TF 내년. 이들 각 오류를 해결하는 방법을 조언한다. 하여 GetString에 따라서 정의되지 않은 참조. 왜이 표시 될 수 있습니다? 음, 학생이 사용하는 경우 자신의 코드에있는 getString, 그들은 제대로 CS50을 포함 해시 한 도트 H는 CS50 라이브러리를 포함합니다. 글쎄, 그들은 무엇을 할 이 오류를 수정해야합니까? 그들은에서 대시 lcs50을 할 필요가 그들은 컴파일하고 명령 행. 그들이 통과하지 못한 경우에 따라서 그 소리 대시 lcs50, 그들이있어 실제를하지 않을 하여 GetString을 구현하는 코드입니다. 질문 29. 암시 적으로 선언 라이브러리 기능으로 strlen. 그럼이 지금, 그들은하지 않은 적절한 해시 일을 포함한다. 특히이 경우에는, 헤더 파일 그들은, 캐릭터 도트 시간입니다 포함해야 이제 문자열 도트 시간 포함 지금 student-- 컴파일러 에 액세스 할 수 있습니다 strlen 함수의 선언, 그것은 알고 코드 그 제대로 strlen을 사용하고 있습니다. 질문 30. 더 %의 변환 데이터 인수보다. 그래서이 무엇입니까? 그럼 이러한 %가 기억 그들이는 printf 관련성 방법 signs--. 그래서 printf의에 우리는 percent-- 수 우리는 뭔가를 인쇄 할 수 있습니다 퍼센트가 나는 N 백 슬래시. 아니면, 퍼센트 나처럼 인쇄 될 수 있습니다 공간 %의 I, 공간, 퍼센트 나. 그 각각에 대해 이렇게 퍼센트 기호, 우리는 필요 printf의 말에 변수를 전달합니다. 그래서 우리가 말할 경우의 printf 괄호 퍼센트 나는, N 가까운 괄호를 백 슬래시 물론, 우리는 우리가 걸 말 정수를 인쇄하는 것, 그러나 우리는 printf의 통과하지 정수는 실제로 인쇄합니다. 그래서 여기 % 더 데이터 인수보다 변환? 즉 우리가 말하는 것 퍼센트의 전체 무리, 우리는 충분히 변수가없는 실제로 그 퍼센트를 입력합니다. 그리고 확실히, 질문 31, 확실히 하나의 블록에 40 바이트를 잃었다. 그래서이 Valgrind의 오류입니다. 이 것을 말하고있다 어딘가에 코드에서, 당신은 40 할당을 바이트 큰 그래서 당신은, 40 바이트를 malloc으로 할당 그리고 당신은 그것을 해제하지 마십시오. 당신이해야 할 가장 가능성 일부 메모리 누출을 발견하기 위해, 당신이 필요로하는 곳에 찾아 이 메모리 블록을 확보. 그리고, 32 질문 크기 4의 잘못된 쓰기. 다시는 Valgrind의 오류입니다. 이것은 할 필요가 없습니다 지금 메모리 누수. 이 말은 설득력 대부분은, 그건,이다 잘못된 메모리 권리의 일종. 그리고 가장 가능성이 일부 버퍼 오버 플로우의 일종. 어디 당신은 아마, 배열을 정수 배열과의하자 이 크기 5의 말할하고 배열 브래킷 (5) 손을 대지. 당신이 쓰기를 시도한다면 값, 즉 메모리는 아니 실제로 액세스를 가지고, 그 그래서 당신은이 오류를받을거야, 크기 4의 잘못된 쓰기를 말하는. Valgrind의 당신이있어 인식하는 것입니다 부적절하게 메모리를 터치 시도. 그리고 그 quiz0은 여기까지. 나는 롭 보덴 해요, 이것은 CS50입니다.