首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当strdup函数失败时?

当strdup函数失败时?
EN

Stack Overflow用户
提问于 2012-03-29 22:44:38
回答 3查看 3.3K关注 0票数 0

我有以下使用strdup函数的代码

代码语言:javascript
复制
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

char source[] = "The Source String ";

int main()
{
  char *dest;
  if ((dest = _strdup(source)) == NULL)
  {
    fprintf(stderr, " Error allocation memory. ");
    exit(1);
  }
  printf("The destination = %s\n", dest);
  return 0;
}

它成功地说出了Source String,但我感兴趣的是它在哪种情况下失败了,以及它在日常问题中的使用情况如何?

代码语言:javascript
复制
char *strdup (const char *s)
{
    char *d = malloc (strlen (s) + 1);   // Space for length plus nul
    if (d == NULL) return NULL;          // No memory
    strcpy (d,s);                        // Copy the characters
    return d;                            // Return the new string
}

如果我们的字符串不是空的,有没有可能导致strdup函数失败?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-29 22:45:46

如果malloc分配内存失败并返回NULL,则返回是。

当您试图复制一个非常大的字符串时,或者如果您的地址空间非常零碎并且几乎已满(因此malloc找不到连续的内存块来分配,或者在没有多少可用内存的嵌入式系统中),可能会出现这种情况。

票数 4
EN

Stack Overflow用户

发布于 2012-03-29 22:47:30

strdup失败的机会由malloc失败的机会决定。在具有虚拟内存的现代操作系统上,malloc故障是非常罕见的事情。在系统内存不足到malloc必须返回NULL之前,操作系统甚至可能已经杀死了整个进程。

票数 1
EN

Stack Overflow用户

发布于 2012-03-29 22:59:05

如果有内存泄漏,内存耗尽的情况并不是没有听说过。因此,检查null,打印出错误消息,甚至在这一点上退出,这不是一个坏主意。请注意,如果内存用完,像'printf‘这样的东西就不能工作(或者可能不能工作,但根据我的经验是不能工作的)。所以你必须使用低级的'write‘或者类似的东西,并且你正在使用的文件描述符(如果你正在写日志文件)应该已经打开了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9927747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档