C 113

C: 다차원 어레이의 메모리를 올바르게 확보

C: 다차원 어레이의 메모리를 올바르게 확보 다차원 배열을 초기화하는 다음 ANSIC 코드가 있다고 가정합니다. int main() { int i, m = 5, n = 20; int **a = malloc(m * sizeof(int *)); //Initialize the arrays for (i = 0; i < m; i++) { a[i]=malloc(n * sizeof(int)); } //...do something with arrays //How do I free the **a ? return 0; } 사용 후**a어떻게 하면 정확하게 메모리에서 자유로울 수 있습니까? [업데이트] (솔루션) Tim(및 기타)의 답변 덕분에 이제 다차원 배열에서 메모리를 확보하는 기능을 수행할 수 있습니다. void f..

programing 2023.06.09

*nix select 및 exceptfds/errorfds semantic

*nix select 및 exceptfds/errorfds semantic syscall을 선택하면 읽기/쓰기 가능한 fds와 파일 설명자의 "예외"를 보기 위해 3개의 파일 설명자 세트가 사용됩니다. 내 셀렉트 맨 페이지에는 다음에 대해 자세히 나와 있지 않습니다.exceptfd설명자 집합입니다.파일 설명자에 대해 어떤 종류의 예외를 알릴 수 있으며 어떤 용도로 사용됩니까? 설명자 유형에 따라 다를 수도 있습니다TCP 소켓, 파이프, 패티 등).어떤 종류의 오류에 대해 더 많은 정보를 가지고 있는 사람?select다양한 종류의 설명자에 대해 보고할 수 있습니까?때때로 오류를 감지하기 위해 exceptfds가 필요하다고 생각되지만, 그것은 잘못된 생각입니다.오류는 redfds로 플래그가 지정됩니다.POS..

programing 2023.06.09

'메모리 스톰프'란?

'메모리 스톰프'란? '기억을 짓밟는다'는 블로그 투고를 우연히 발견했습니다. 메모리(관리 코드 세계에서 태어나면 들어본 적도 없는 것)를 쉽게 제거할 수 있는 C++ 프로그램입니다. 그리고 사실 나는 그것에 대해 들어본 적이 없어! 그럼 이건 뭐야? 기억을 뭉개고 뭉개고무는 기억?언제 일어납니까?다른 코드 조각이 충돌하는 방식으로 메모리를 사용하고 있다는 것을 깨닫지 못한 채 코드 조각이 메모리를 조작할 때 메모리는 "무디게" 됩니다.메모리를 스탬프 하는 일반적인 방법은 몇 가지 있습니다. 하나는 예를 들어 100바이트의 메모리를 할당한 다음 100번째 주소 뒤에 무언가를 저장하는 것입니다.이 메모리는 완전히 다른 것을 보관하기 위해 사용될 수 있습니다.이것은 특히 디버깅이 어렵습니다.왜냐하면 이 문제..

programing 2023.01.30

Pthread 라이브러리에서 스레드 제거

Pthread 라이브러리에서 스레드 제거 사용하고 있다pthread_create(&thread1, &attrs, //... , //...);그리고 만약 어떤 상황이 발생한다면 이 스레드를 어떻게 죽일 필요가 있는가?먼저 스레드 ID 저장 pthread_create(&thr, ...) 그럼 나중에 전화해요. pthread_cancel(thr) 그러나 이는 권장되는 프로그래밍 연습이 아닙니다!세마포어나 메시지와 같은 스레드 간 통신 메커니즘을 사용하여 스레드가 실행을 중지해야 함을 전달하는 것이 좋습니다. pthread_kill(...)은 실제로 수신 스레드를 종료하는 것이 아니라 스레드에 신호를 전달하는 것에 주의해 주십시오.이것은, 발생하는 신호와 신호 핸들러에 의해서 다릅니다.이 문제에는 두 가지 접근..

programing 2023.01.20

C에서는 마이너스 어레이 인덱스를 사용할 수 있습니까?

C에서는 마이너스 어레이 인덱스를 사용할 수 있습니까? 코드를 읽다가 그 사람이 이걸 쓰고 있는 걸 발견했어요arr[-2]두 번째 요소에 액세스하기 전에arr다음과 같은 경우: |a|b|c|d|e|f|g| ^------------ arr[0] ^---------- arr[1] ^---------------- arr[-2] 가능한가요? 나는 그것을 알고 있습니다.arr[x]와 같다*(arr + x).그렇게arr[-2]이*(arr - 2)괜찮은 것 같아요.당신은 어떻게 생각하나요?그것이 맞아요.C99부터 6 6 . 5 . 2 . 1 / 2 : 첨자 연산자 []의 정의는 E1[E2]이 (*(((E1)+(E2)))와 동일하다는 것이다. 마법 같은 건 없어1대 1의 등가입니다.포인터(*)를 참조할 때 항상 그렇듯..

programing 2022.12.26

C++ 표준 간 변환:: 벡터 및 C 어레이(복사하지 않음)

C++ 표준 간 변환:: 벡터 및 C 어레이(복사하지 않음) 데이터를 명시적으로 복사하지 않고 std::vector와 그 기초가 되는 C 어레이 int* 사이에서 변환할 수 있으면 좋겠습니다. std::벡터는 기본 C 어레이에 대한 액세스를 제공합니까?이런 걸 찾고 있어요 vector v (4,100) int* pv = v.c_array(); 편집: 또한, 역순으로 할 수 있습니까? 즉, I have to initialize the converse, 즉,std::vector복사하지 않고 C 어레이를 사용할 수 있습니까? int pv[4] = { 4, 4, 4, 4}; vector v (pv); 다음과 같이 첫 번째 요소에 대한 포인터를 얻을 수 있습니다. int* pv = &v[0]; 이 포인터는 벡터가..

programing 2022.12.26

.so 파일에 기호를 나열하려면 어떻게 해야 합니까?

.so 파일에 기호를 나열하려면 어떻게 해야 합니까? .so 파일에서 내보내는 기호를 나열하려면 어떻게 해야 합니까?가능하면 소스도 알고 싶습니다(예를 들어 정적 라이브러리에서 불러오는 경우). 차이가 있다면 gcc 4.0.2를 사용하고 있습니다.기호를 나열하는 표준 도구는 다음과 같습니다.nm, 다음과 같이 간단하게 사용할 수 있습니다. nm -gD yourLib.so C++ 라이브러리의 심볼을 보려면 심볼을 분리하는 "-C" 옵션을 추가합니다(더 읽기 쉽게 분리). nm -gDC yourLib.so .so 파일이 엘프 형식인 경우 다음 두 가지 옵션이 있습니다. 어느 하나objdump(-C는 C++를 분리하는 경우에도 유용합니다. $ objdump -TC libz.so libz.so: file for..

programing 2022.10.26

'for' 루프 내부의 'for' 루프가 동일한 카운터 변수 이름을 사용할 수 있습니까?

'for' 루프 내부의 'for' 루프가 동일한 카운터 변수 이름을 사용할 수 있습니까? 를 「」에 할 수 ?for를 틀다for 루우프? 루우프? 니면변 변수 ?로 ?? ????다음 코드가 두 번째 루프에 대해 다음과 같은 다른 변수를 사용하는 경우j 「」입니다.i for(int i = 0; i < 10; i++) { for(int i = 0; i < 10; i++) { } } 같은 이름(식별자)을 사용할 수 있습니다.그것은 다른 대상이 될 것이다.그들은 서로 영향을 미치지 않을 것이다.내부 루프 내에서는 외부 루프에서 사용되는 객체를 참조할 방법이 없습니다(포인터 포인터를 제공하는 등 특별한 준비를 하지 않는 한). 이것은 일반적으로 나쁜 스타일이며 혼동하기 쉬우므로 피해야 합니다. 정의되어 있는 에만..

programing 2022.09.26

C에서 extern 키워드를 올바르게 사용하는 방법

C에서 extern 키워드를 올바르게 사용하는 방법 가 궁금한 것은 어떤 것입니다.extern키워드를 지정합니다. 나는 이것이 언제 실제로 사용되어야 하는지 모르겠다.프로그램을 작성하기 때문에 제가 사용하는 기능은 모두 첨부한 헤더 파일을 통해 이용할 수 있습니다. 왜 이 요?extern머리글 파일에 노출되지 않은 것에 접근할 수 있게 해줬나요? 하면 좋을지 수 것 같아요extern이치노렇면 츠 should고... also? ★★★★★★★★★★★★★★★★?extern헤더 파일에 키워드가 없는 디폴트 선언인 경우?extern링크를 변경합니다.키워드를 지정하면 함수/변수는 다른 장소에서 사용할 수 있는 것으로 간주되며 해결은 링커에 지연됩니다. 차이가 있어요.extern함수와 변수에 대해 설명합니다. 변수의..

programing 2022.09.25

루프나 조건문을 사용하지 않고1 ~ 1000 으로 인쇄하는 C 코드는 어떻게 동작합니까?

루프나 조건문을 사용하지 않고1 ~ 1000 으로 인쇄하는 C 코드는 어떻게 동작합니까? 찾았다C루프나 조건 없이 1부터1000까지 출력하는 코드:근데 어떻게 동작하는지 모르겠어요누가 코드를 살펴보고 각 행에 대해 설명해 줄 수 있나요? #include #include void main(int j) { printf("%d\n", j); (&main + (&exit - &main)*(j/1000))(j+1); } 절대 그런 식으로 코드를 작성하지 마세요. 위해서j

programing 2022.09.24