제목이 내 질문입니다. 메모리에서 인수는 초기화 방법에 따라 스택이나 힙에 위치 할 수 있지만 하드 코딩 된 정보는 어떻게 처리됩니까?"하드 코딩"과 메모리 관련 인수 전달의 차이점은 무엇입니까?
void function(){
ifstream infile("home/some/file/path");
}
대
void function(char* filePath){
ifstream infile(filePath); //filePath points to a character array which contains home/some/file/path
}
어떤 메모리 연루의 사용으로 인해 발생할 수 : 예를 들어
는,이 사이의 차이점은 무엇ifstream
의 생성자를 사용합니다 다른 하나 이상? (char *가 정확하게 free'd되지 않으면 다중 스레딩이 힙 손상을 초래할 수 있습니다.
나는 큰 문제에 대한 해답을 적용 할 수 있도록 차이점과 가능한 함축적 의미를 이해하기 위해 노력하고 있습니다. 내가 잘못된 진술/가정을했다면 모든 통찰력을 환영하고 언제든지 나를 바로 잡을 수 있습니다!
'filePath'의 정의와 생성 방법에 따라 달라집니다. 그러나 힙 부패는'자유롭지 않은 '것에 기인하지 않는다. 힙 손상은 할당 된 버퍼 외부의 잘못된 코드 쓰기로 인해 발생합니다. –
첫 번째 예에서 문자열은 프로세스의 읽기 전용 영역에 놓입니다. 따라서 거기에 피해를 줄 수있는 것은 없습니다. –
@MatsPetersson 만약 내가 묻지 않았다면, 얼마나 많은 다른 방법으로'char * '를 정의 할 수 있을까요? 나는 당신이'char * foo = (char *) malloc (16)'과 같은 것을 할 수 있다는 것을 알고있다. 그러나 다른 것은, 대중적인 방법이 있다고 가정 해 보자. –