나는 c 프로그램을 만들려고하고 있는데, 나는 malloc 명령에 빠져있다. 이건 내 코드입니다 : 그것은 있어야 할 곳에malloc은 4 비트 만 할당합니까?
#include <stdlib.h>
#include <iostream>
#include "Oef1.h"
using namespace std;
some methode clled by main{
int ** q=NULL;
int m=read(q);
}
int read(int ** q){
int m=3;
int n=5; //n and m are beeing asked, but for debugging hard-coded
cout << sizeof(int*) << endl; // returns 4
cout <<sizeof(q) << endl; //returns 4
cout <<m*sizeof(int*) << endl; //returns 12
q=(int**)realloc(q,m*sizeof(int*));
cout <<sizeof(q) << endl; //should return 12 but returns 4
for(int k =0; k < m; k++){
q[k] = (int*)malloc(n*sizeof(int));
}
return m;
}
문제는 malloc을 한 후에는 sizeof (Q)를 명령 있다는 것입니다 여전히 4 12 (3 * 4). 나는 당신이 배열을 C++로 만들 수 있다는 것을 안다. 그러나 나는 목적을 위해 malloc을 사용한다. 그것은 아마 어리석은 실수 일 테지만 나는 그것을 찾지 못한다.
당신은 할 수 있습니다 비트와 바이트의 차이점에 익숙해지면 프로그래머로서의 삶이 훨씬 쉬워 질 것입니다 .... – SoapBox
read() 함수에서 realloc을 사용하는 방식은 잘못되었습니다. 실제로는 위의 코드는 "maine에 의해 clled 된 일부 메소드"에서 q를 사용하지 않기 때문에, realloc은 메모리를 새로운 위치로 이동시키고 반환하는 옵션을 가지고 있습니다. 당신은 q를 읽기에 올바르게 할당하지만 q는 전달되기 때문에 값에 따라, "main 메소드에 의해 clled 된 일부 메소드"가 reallo 후에 q를 사용하는 경우 C는 메모리 블록 (q는 처음에는 NULL이기 때문에)을 이동하기로 결정했습니다. q를 사용하려고 시도하는 "일부 메서드는 기본으로 클리핑됩니다"의 어떤 것이라도 원하는 작업을 수행하지 않습니다. – George