ÇÁ·Î±×·¡¹Ö
ù ÆäÀÌÁö ·£´ý ±Û ȸ¿ø°¡ÀÔ ·Î±×ÀÎ
ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 11:07:01
URL https://te31.com/rgr/view.php?id=study&no=2061 ¸ð¹ÙÀÏ È­¸é
C¾ð¾î ¸Þ¸ð¸® ÇØÁ¦ Áú¹®Á¡¿©;;

µ¿ÀûÇÒ´ç °ü·Ã ¹®Á¦¸¦ Ç®°í Àִµ¥ ¿Ö ¾ÈµÇ´ÂÁö ¾Æ¹«¸® ºÁµµ ¸ð¸£°Ú½À´Ï´Ù;
¹Ø¿¡ free ¿¡¼­ Àڲ٠ƨ°Ü¹ö¸®´Âµ¥ ¹¹°¡ ¹®Á¦Àΰǰ¡¿ä ¤Ð¤Ð
ptrArr[0]ÀÌ printf·Î Ãâ·ÂÀÌ µÇ¸éÀº ÇØÁ¦µµ °¡´ÉÇÑ°Å ¾Æ´Ñ°¡¿ä?


---------------------------

// Æ÷ÀÎÅÍ ¹è¿­À» »ç¿ëÇÏ¿© ¹è¿­ ÇÑÄ­ÇÑÄ­ ¸¶´Ù µ¿Àû ¸Þ¸ð¸® ÇÒ´çÇÏ¿© ¹®ÀÚ¿­À» ³Ö´Â ¿¬½À

// ¸ñÇ¥. ¹®ÀÚ¿­À» ÀÔ·ÂÇÏ¸é ±âÁ¸ÀÇ ¹®ÀÚ¿­À» 10ÁÙ ±îÁö º¸Á¸ÇÏ¸ç »õ·Î¿î ¹®ÀÚ¿­À» °è¼Ó Ãß°¡ÇØ ³ª°¡´Â
// ¸¶Ä¡ °ÔÀÓÀÇ Ã¤ÆÃâ°ú °°Àº°É ¸¸µé¾î º¸°íÀÚ ÇÔ.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>

int main(void)
{
        char* ptrArr[10];
        char* bufChar = (char*)malloc(sizeof(char) * 128);
        int charLen = 0;
        int arrIdx = 0;

        while (1)
        {
                gets_s(bufChar, 128); // Á¶°Ç. ÃÖÃÊ ÀԷ½ÿ¡¸¸ »ç¿ë ÇÒ ±ä ¹öÆÛ (128ÀÚ) Â¥¸®¸¦ µÎ°í ¿©±â·Î ÀÔ·Â ¹ÞÀ½.

                system("cls");

                // Á¶°Ç. 10 ¹ø ÀÌ»óÀÇ ÀÔ·ÂÀ» ¹ÞÀ¸¸é °¡Àå À§ÀÇ ¹®ÀÚ¿­ ºÎÅÍ »èÁ¦ÇÑ´Ù. ½ºÅ©·ÑÀÌ µÇ´Â µí ó·³.
                if (arrIdx > 9)
                {
                        arrIdx--;

                        free(ptrArr[0]);

                        for (int i = 0; i < 9; i++)
                        {
                                ptrArr[i] = ptrArr[i + 1];
                        }
                }

                // Á¶°Ç. ÀԷ¹ÞÀº ±ÛÀÚÀÇ ±æÀ̸¸Å­ µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ »ý¼ºÇÏ¿© º¹»ç ÈÄ µî·Ï - ¸Þ¸ð¸® Àý¾à
                charLen = strlen(bufChar);

                ptrArr[arrIdx] = (char*)malloc(charLen * (sizeof(char)));

                strcpy(ptrArr[arrIdx], bufChar);
                
                for (int i = 0; i < arrIdx + 1; i++)
                {
                        printf("%sn", ptrArr[i]);
                }

                arrIdx++;
        }

        return 0;
}

Áú¹® | 1372¸íÀÌ Àоú¾î¿ä. 18.217.8.82

0
1 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 11:13:56
¹®ÀÚ¿­¿ë ¸Þ¸ð¸®¸£ ÇÒ´çÇÒ¶§´Â Ç×»ó null¹®ÀÚ¸¦ °í·ÁÇϼ¼¿ë...
2 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 11:19:05
1// null.. ³Î µ¥¸®·¯°¡..(¹Ìħ)


À¸¾Æ¾Æ ¹¹Áö
3 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 11:28:15
free ÇϱâÀü¿¡

temp<-ptrArr[0];
ptrArr <- ++temp;

?
4 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:04:55
¾ÆÇÏ À¸¾Æ¾Æ!!
ptrArr[arrIdx] = (char*)malloc(charLen * (sizeof(char) + 1));

·Î +1À» ÇØÁÖ´Ï±î µÇ³×¿ä? ¹º°¡ ¸Þ¸ð¸®°¡ °è¼Ó ²¿ÀÌ´Ù°¡ free¿¡¼­ ¹®Á¦°¡ »ý±ä°Ç°¡..

°¨»çÇÕ´Ï´Ù ¾ÆÅ©Çʵå´Ô¤Ð¤Ð
5 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:05:56
3// ¹«½¼ ¸»¾¸À̽ÅÁö Àß ¸ð¸£°Ú¾î¿©;
6 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:12:49
1¹ø ¸®ÇÃÀ» °Ë»öÇغ¸¼¼¿©
7 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:26:22
¹®ÀÚ¿­Àº Ç×»ó ³¡¿¡ nullÀÌ µé¾î°¡¼­
8 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:26:52
stringÀ» ³ÖÀ¸·Á¸é Å©±â 7ÀÇ Ä³¸¯ÅÍÇü ¹è¿­À» ¼±¾ðÇؾßÇÕ´Ï´Ù.
9 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 12:39:53
4// À§Ä¡¸¦ ãÀ¸¼ÌÀ¸´Ï ´äÀ» µå¸®ÀÚ¸é...
malloc ´ÙÀ½ÁÙ¿¡ ÀÖ´Â strcpy(ptrArr[arrIdx], bufChar); ±¸¹®¿¡¼­ ½ÇÁ¦ º¹»çµÇ´Â ¸Þ¸ð¸®´Â null¹®ÀÚ ¶§¹®¿¡ bufChar+1 ¹®ÀÚ°¡ µÇ°Ô µË´Ï´Ù.
±×·±µ¥ ÇÒ´çÀ» bufChar¸¸Å­¸¸ ÇÏ°Ô µÇ¸é strcpy¿¡¼­ buffer overflow°¡ »ý±â¸é¼­ heap block¸¦ ±úÆ®¸®°Ô µË´Ï´Ù.
±úÁø »óȲ¿¡¼­´Â º¸Åë ¹®Á¦°¡ ³ªÅ¸³ªÁö ¾Ê°í, freeÇÒ¶§ heap blockÀÌ ±úÁ® Àֱ⠶§¹®¿¡ fault¸¦ ÀÏÀ¸Å°°Ô µË´Ï´Ù.
10 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 14:40:38
"string"

's', 't', 'r', 'i', 'n', 'g', '\0'
11 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 16:53:12
if ( ptr ) {
free(ptr);
ptr = null;
}

ÀÌ°É »ýÈ°È­Çϸé..
12 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 20:28:41
char*

³Ñ³ª ±¸¸°°Í (¹Ìħ)
13 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-23 22:38:57
char* ³Ñ³ª ±¸¸°°Í 2
15 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-24 10:06:41
¿À¿ì ¸ðµÎ °¨»çÇÕ´Ï´Ù-

±×·±µ¥ char*°¡ ¿Ö ³Ñ³ª ±¸¸®ÁÒ(?)

±Û°í Èüºí·ÏÀÌ ±úÁø´Ù°Å³ª ÇÏ´Â°Ç µû·Î °ø
ºÎÇؾßÇϴ°ǰ¡¿ä?
°æÇèÀ¸·Î ¾ò´Â °Ç°¡¿ê
16 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-24 11:16:46
char*´Â ½ºÆ®¸µÀÇ end-marker(C´Â null character)¸¦ ÀÌ¿ëÇÏ´Â ¹æ½ÄÀ¸·Î
1. ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ±¸ÇÒ ¶§ ¹®ÀÚ¿­ Àüü¸¦ ½ºÄµ¾ßÇÒ Çʿ伺ÀÌ ÀÖ°í
2. end-marker°¡ ÈѼյǴ µîÀÇ ¹®Á¦°¡ »ý°åÀ» ¶§ buffer overflow¸¦ ÀÏÀ¸Å°´Â ¿øÀÎÀÌ µË´Ï´Ù.
ÀÌ·± À§ÇèÀ» °¡Áö°í Àִµ¥, »ó´ëÀûÀ¸·Î ¾ò´Â À̵æÀº 1~3¹ÙÀÌÆ® Á¤µµÀÇ ¿ë·® Àý¾à »ÓÀÔ´Ï´Ù.
±×·¡¼­ ´ëºÎºÐÀÇ °í±Þ ¾ð¾î´Â ÆĽºÄ® ó·³ ¹®ÀÚ¿­ÀÇ ¹öÆÛ Æ÷ÀÎÅÍ¿Í, ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °°ÀÌ ÀúÀåÇÕ´Ï´Ù.

heap¿¡ ´ëÇؼ­´Â Memory managementµî¿¡¼­ ¼³¸íÇÏ°í Àִµ¥, °£·«È÷...
mallocµîÀ¸·Î dynamic allocationÀ» Çϸé
[header | buffer][header | buffer][header | buffer] ... [header | buffer]
ÀϹÝÀûÀ¸·Î ÀÌ·± ÇüÅÂÀÇ ±¸Á¶·Î heap blockÀÌ »ý¼ºµÇ°Ô µË´Ï´Ù.
header¿¡´Â ´ÙÀ½ ºí·°ÀÇ ÁÖ¼Ò¶ó´øÁö, Exception Handler¶ó´øÁö, Chunk ÁÖ¼Ò¶ó´øÁö °¢ ¾Ë°í¸®Áò¿¡ µû¸¥ Á¤º¸°¡ µé¾î°¡°Ô µÇ´Âµ¥¿ä,
buffer overrunÀÌ ¹ß»ýÇϸé header ºÎºÐÀÌ ±úÁö¸é¼­ ¹®Á¦°¡ µÇ´Â°Ì´Ï´Ù.

ÀÌ ºÎºÐÀº OS Á¢±ÙÀûÀÎ ºÎºÐÀ̶ó, ÄÄÇ»ÅÍ °øÇÐÂÊ °øºÎ°¡ ÇÊ¿äÇÕ´Ï´Ù.
https://en.wikipedia.org/wiki/Memory_management
17 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-24 20:42:31
¿¹Àü¿£ ´ëüÀç°¡ ¾ø¾î¼­ ¿ï¸ç °ÜÀÚ¸Ô±â·Î ½èÁö¸¸

¿äÁòÀº ÈξÀ ´õ ÁÁÀº°Ô ¸¹°Åµç¿ä

Á¦°øÇÏ´Â ±â´ÉÀÌ °ÅÀÇ ¾ø¾î¼­ ±¸·Á¿ä
18 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-24 20:43:19
ÄÚµùÀÌ Ãë¹ÌÀÎ ÀϹÝÀε鿡°Ô´Â À§ÇèÇϱ⸸ ÇÏ°í ÇÏµî ¾µ¸ð¾ø´Â ¹°°ÇÀÌ°í¿ä

ÄÄ°øÀ̸é.. ¸ð¸£¸é ÀÏ´Ü ´ë±â¾÷ ÃëÁ÷Àº ºÒ°¡´É
19 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-25 10:47:53
c°°Àº°Å ¾²´Â°Å ¾Æ´Õ´Ï´Ù
20 ºñ°ø°³ ¼Õ´Ô ¡¦ 2016-11-25 18:48:09
¹öÆÛ¸¦ stringÀ¸·Î Á¢±ÙÇÏ´Â ÇÔ¼ö¸¸ Á¦´ë·Î ¾²¸é char*´Â ¹®Á¦°¡ ¾øÁÒ

ÀÌ·¯ÇÑ ÇÔ¼öµéÀº Ä£ÀýÇÏ°Ôµµ 'n' µé¾î°¡´Â ¾Öµéµµ Àְŵç¿ä.
strcpyµµ strncpy¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù.
strcpy(ptrArr[arrIdx], bufChar);
=>
strcpy(ptrArr[arrIdx], bufChar, sizeof(char) * 128);
´ñ±ÛÀ» ÀÛ¼ºÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.
(±ÇÇÑÀÌ ¾ø´Â ȸ¿ø·¹º§)
¸ñ·ÏÀ¸·Î
ÀÌ¿ë¾à°ü | ±¤°í/Á¦ÈÞ | °³ÀÎÁ¤º¸Ãë±Þ¹æħ | ¹®ÀÇ/½Å°í | ¸ð¹ÙÀÏ TE31 | ¼­¹ö ºÎÇÏ : 18.75%
½Ç½Ã°£ Issue Ä¿¹Â´ÏƼ TE31 [¾ËÁö·Õ] ¨Ï 2002-2024
TOP arrow_upward