>  기사  >  백엔드 개발  >  PHP가 C++ 확장을 호출할 때 memset/sizeof 함수가 유효하지 않은 문제

PHP가 C++ 확장을 호출할 때 memset/sizeof 함수가 유효하지 않은 문제

WBOY
WBOY원래의
2016-08-08 09:21:012221검색

질문: C++에서는 다음과 같이 배열을 초기화하기 위해 memset 함수를 사용하는 데 익숙합니다.

int sz = 100;
int *a = (int*)malloc(sizeof(int) * sz);
memset(a,0,sizeof(a));

위 코드는 sz 크기의 int 배열 a를 동적으로 엽니다. , 그리고 puts 할당된 메모리에는 ASCII 코드 0이 할당되었습니다

PHP가 이 C++ 코드를 호출할 때(url을 사용하여 PHP 함수 호출) memset 함수가 작동하지 않고 배열 a의 메모리가 프로그램에 많은 오류가 있었고 문제 해결 과정에서 이 문제가 발견되었습니다

원인: 근본 원인은 PHP가 C++를 호출할 때 sizeof(a)가 해당 크기를 반환하지 않는다는 것입니다. a가 가리키는 연속 메모리 공간이지만 포인터 자체의 크기만 반환하므로 memset은 적절한 역할을 수행하지 않습니다.

해결책: memeset의 세 번째 매개변수에 sizeof(a) 대신 sizeof(int) * sz를 사용하고 배열의 실제 크기를 매개변수로 전달하면 memset 함수가 작동할 수 있습니다

PHP가 C++ 확장을 호출할 때 C++의 포인터와 관련된 많은 라이브러리 함수에 문제가 있으며 때로는 PHP가 확장을 호출할 때 메모리 관리 메커니즘에 문제가 있어 직접 작성해야 할 수도 있습니다.

저작권 안내: 이 글은 해당 블로거의 원본 글이므로 블로거의 허락 없이 복제할 수 없습니다.

위 내용은 PHP가 C++ 확장을 호출할 때 잘못된 memset/sizeof 함수 문제를 소개하며, 관련 측면도 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.