草庐IT

c - 如果我在同一个指针 (C) 上使用 malloc 两次会发生什么?

例如,我创建了一个指针newPtr并使用malloc(somesize),然后我再次使用malloc(somesize)和相同的指针。怎么了?然后我会创建与第一个相同大小的第二个内存块吗?newPtr是否指向同一个地址?例子:int*newPtr;newPtr=malloc(10*sizeof(int));newPtr=malloc(10*sizeof(int)); 最佳答案 您的程序将发生内存泄漏。newPtr的第一个值将丢失,您将无法free它。Amithencreatingasecondblockofmemorythesame

c - 如果我在同一个指针 (C) 上使用 malloc 两次会发生什么?

例如,我创建了一个指针newPtr并使用malloc(somesize),然后我再次使用malloc(somesize)和相同的指针。怎么了?然后我会创建与第一个相同大小的第二个内存块吗?newPtr是否指向同一个地址?例子:int*newPtr;newPtr=malloc(10*sizeof(int));newPtr=malloc(10*sizeof(int)); 最佳答案 您的程序将发生内存泄漏。newPtr的第一个值将丢失,您将无法free它。Amithencreatingasecondblockofmemorythesame

我可以依靠 malloc 返回 NULL 吗?

我在Unix系统上读到,即使内存实际上不可用,malloc也可以返回非NULL指针,并且稍后尝试使用内存会触发错误。由于我无法通过检查NULL来捕获这样的错误,我想知道检查NULL到底有多大用处?在相关的说明中,HerbSutter说处理C++内存错误是徒劳的,因为系统会在异常实际发生之前很久就进入分页痉挛状态。这也适用于malloc吗? 最佳答案 引用Linuxmanuals:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenma

我可以依靠 malloc 返回 NULL 吗?

我在Unix系统上读到,即使内存实际上不可用,malloc也可以返回非NULL指针,并且稍后尝试使用内存会触发错误。由于我无法通过检查NULL来捕获这样的错误,我想知道检查NULL到底有多大用处?在相关的说明中,HerbSutter说处理C++内存错误是徒劳的,因为系统会在异常实际发生之前很久就进入分页痉挛状态。这也适用于malloc吗? 最佳答案 引用Linuxmanuals:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenma

c - alloc、malloc 和 alloca — 有什么区别?

我的印象是Objective-C中的alloc(当我们调用[anyObjectalloc]实际上是在实现C函数malloc和内存在堆中分配,但在任何地方都找不到答案。另外,在搜索alloc时,我发现alloc在堆栈中分配内存。如果我没记错的话,alloc在堆中分配内存来创建对象。那么,alloc和malloc(以及alloc)有什么区别呢?谁能总结一下? 最佳答案 alloc()不是标准C库函数。一些较旧的编译器和库包含提供一些内存分配功能的库,但这不是标准的。MicrosoftVisualC++运行时包括Alloc()函数有点类似

c - alloc、malloc 和 alloca — 有什么区别?

我的印象是Objective-C中的alloc(当我们调用[anyObjectalloc]实际上是在实现C函数malloc和内存在堆中分配,但在任何地方都找不到答案。另外,在搜索alloc时,我发现alloc在堆栈中分配内存。如果我没记错的话,alloc在堆中分配内存来创建对象。那么,alloc和malloc(以及alloc)有什么区别呢?谁能总结一下? 最佳答案 alloc()不是标准C库函数。一些较旧的编译器和库包含提供一些内存分配功能的库,但这不是标准的。MicrosoftVisualC++运行时包括Alloc()函数有点类似

c - realloc 移动内存块时如何更新其他指针?

realloc引用说:Thefunctionmaymovethememoryblocktoanewlocation,inwhichcasethenewlocationisreturned.是否意味着如果我这样做:voidfoo(){void*ptr=malloc(1024);unsignedchar*cptr=(unsignedchar*)ptr+256;ptr=realloc(ptr,4096);}如果realloc移动了block,那么cptr可能会失效?如果是,那么realloc是否会以任何方式发出信号,表明它将移动block,以便我可以做一些事情来防止cptr变得无效?

c - realloc 移动内存块时如何更新其他指针?

realloc引用说:Thefunctionmaymovethememoryblocktoanewlocation,inwhichcasethenewlocationisreturned.是否意味着如果我这样做:voidfoo(){void*ptr=malloc(1024);unsignedchar*cptr=(unsignedchar*)ptr+256;ptr=realloc(ptr,4096);}如果realloc移动了block,那么cptr可能会失效?如果是,那么realloc是否会以任何方式发出信号,表明它将移动block,以便我可以做一些事情来防止cptr变得无效?

c - 如果 malloc 失败了怎么办?

如果malloc分配失败,我们应该再试一次吗?在这样的情况下:char*mystrdup(constchar*s){char*ab=NULL;while(ab==NULL){ab=(char*)malloc(strlen(s)+1);}strcpy(ab,s);returnab;}while循环对于检查内存分配是否有效? 最佳答案 一般来说,现代的malloc()实现将返回NULL仅作为绝对的最后手段,再试一次肯定无济于事。唯一有用的是释放一些内存,然后再试一次。如果您的应用程序拥有任何消耗性资源,那么现在是释放它们的时候了,然后再

c - 如果 malloc 失败了怎么办?

如果malloc分配失败,我们应该再试一次吗?在这样的情况下:char*mystrdup(constchar*s){char*ab=NULL;while(ab==NULL){ab=(char*)malloc(strlen(s)+1);}strcpy(ab,s);returnab;}while循环对于检查内存分配是否有效? 最佳答案 一般来说,现代的malloc()实现将返回NULL仅作为绝对的最后手段,再试一次肯定无济于事。唯一有用的是释放一些内存,然后再试一次。如果您的应用程序拥有任何消耗性资源,那么现在是释放它们的时候了,然后再