Tag: malloc

c中malloc之后的默认值是多少?

我有以下代码: int *p; p = (int*)malloc(sizeof(int) * 10); 但是这个带有10个元素的int数组的默认值是多少? 他们都是0?

使用malloc(sizeof())从* void到* int 的无效转换

我正在编写一个计算两个数字的最大公分母的程序,但是我遇到了malloc函数和指针的问题。 实际上很清楚堆栈和堆段如何在内存中工作以及原因。 但是,在程序中,在声明指针并且使用mallocfunction与否时,我还无法理解。 这是代码: #include #include #include int *calcolaDivisori(int); int main(int argc, char** argv) { int foundCounter = 0; int i,j,s1,s2; int n1,n2; int mcd = 1,mcm; int *pn1,*pn2; int d1[100],d2[100]; // INPUT dei due interi printf(“Inserisci il primo numero :”); scanf(” %d”, &n1); printf(“\nInserisci il secondo numero :”); scanf(” %d”, &n2); // calcolo divisori […]

C中的函数free()对我不起作用

我一直在尝试使用free()通过malloc()分配的malloc() 。 它的一些结构是免费的,但它们保留了一些它们的方式,它们也与它们的孩子保持联系。 它也永远不会释放二进制树的根(gRootPtr) 。 我正在使用Xcode来查明二叉树使用的内存是否已被释放,并使用if语句。 我用来释放内存的代码: void FreeMemory(InfoDefiner *InfoCarrier) { if ((*InfoCarrier) != NULL) { FreeMemory((&(*InfoCarrier)->left)); FreeMemory((&(*InfoCarrier)->right)); free((*InfoCarrier)); } } 代码我用来查看内存是否已被释放。 if (gRootPtr != NULL) { return 1; } else{ return 0; }

释放函数中的malloced结构

我正在创建一个包含缓冲区function的源文件,我想用于我正在创建的其他库。 它工作正常但我无法摆脱我在其中一个函数中创建的缓冲区结构。 以下片段应该有助于说明我的问题: C头: //dbuffer.h … typedef struct{ char *pStorage; int *pPosition; int next_position; int number_of_strings; int total_size; }DBUFF; … C源: //dbuffer.c … DBUFF* dbuffer_init(char *init_pArray) { //Find out how many elements the array contains int size = sizeof_pArray(init_pArray); //Initialize buffer structure DBUFF *buffer = malloc(sizeof(DBUFF)); //Initialize the storage buffer->pStorage = malloc( (sizeof(char)) * (size) […]

是否必须释放每个malloc调用

根据我的理解,因为malloc动态分配mem,你需要释放该mem以便它可以再次使用。 如果你返回一个使用malloc创建的char *会发生什么(即你应该如何释放它) 如果您将指针保持原样并退出应用程序将被释放。(我无法找到明确的答案,有些人说是,有些人说没有)。

当使用free()释放内存时,为什么指针指向的内容没有改变?

在动态内存分配方面,我是新手。 当我们使用void free(void *ptr)释放内存时,内存被释放,但指针的内容不会被删除。 这是为什么? 最新的C编译器有什么区别吗?

嵌入式C中的动态内存分配

我可以在嵌入式C中使用malloc和delete函数吗? 例如,我有一个函数,其中在函数malloc的结构上创建了指针。 这个函数在ram中返回地址,我可以使用它。 退出我的function,在那里分配了内存,这个指针将被删除或者这个内存为此保留,而不会被函数删除终止? Typedef struct { Char varA; Char varB } myStruct ; Void myfunc ( void) { myStruct * ptrStruct = ( myStruct *) malloc ( sizeof (myStruct)) ; // Code here //…….. return ; }

当我们使用malloc而没有声明stdlib.h时头文件编译器返回一个int为什么?

之前我问了一个问题,即如果malloc的返回被强制转换,那么将被标记的错误被隐藏 ,我得到的答案是:在(较旧的方言)C中,你可以调用一个尚未声明的函数; 隐式声明一个返回类型为int的函数。 因此,如果您在不包含标头的情况下调用malloc() ,则会得到错误地认为它返回int 。 如果没有强制转换,当您尝试将其分配给指针时,会出现编译器错误。 使用强制转换,代码将被编译,可能会产生模糊的运行时错误和冗长的调试会话。 据我所知,如果不包含头文件,编译器会隐式声明一个返回类型为int的函数。 但我感到困惑的是,根据malloc()的创建者定义的函数定义,每当我们使用它时它将返回void * ,但是如果没有它返回int 。 那么它的定义如何改变,是编译器隐式地将void *改为int *类型,还是有其他原因? 我知道我无法正确解释我的问题,但如果有人理解,请向我解释一下。

C – 共享内存 – 共享结构中的动态数组

我正在尝试分享这样的结构 例: typedef struct { int* a; int b; int c; } ex; 在进程之间,问题是当我使用malloc初始化’a’时,它变为私有的进程堆执行此操作(或者至少我认为这是发生的事情)。 有没有办法用这个有效的结构创建共享内存(使用shmget,shmat)? 编辑:我正在研究Linux。 编辑:我有一个初始化缓冲区的进程,如下所示: key_t key = ftok(“gr”, ‘p’); int mid = shmget(key, sizeof(ex), IPC_CREAT | 0666); ex* e = NULL; status b_status = init(&e, 8); //init gives initial values to bc and allocate space for ‘a’ with a malloc e = […]

“strcpy”和“malloc”?

做以下事情是否安全? #include #include #include int main(void) { char* msg; strcpy(msg, “Hello World!!!”); //<——— printf("%s\n", msg); return 0; } 或者应该使用以下内容? char* msg = (char*)malloc(sizeof(char) * 15);