【问题标题】:segmentation fault in simple string manipulation简单字符串操作中的分段错误
【发布时间】:2011-03-02 22:38:18
【问题描述】:

此程序在执行时出现分段错误。我该如何解决?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  int bufsize = 1024;
  char *buf;
  char *msg="GET /dumprequest HTTP/1.1";
  memset (buf,0, bufsize);
  strcpy(buf,msg);
  puts(buf);
  return 0;
}

【问题讨论】:

  • 问题解决了.....我试图改变一个常数..

标签: c gcc segmentation-fault


【解决方案1】:

您没有为buf 分配内存。试试:

const int bufsize = 1024;
char buf[bufsize];

【讨论】:

    【解决方案2】:

    memset()strcpy() 的调用试图写入指向随机位置而不是malloc()ed 内存块的指针,这肯定会导致问题。

    【讨论】:

      【解决方案3】:

      你需要为 buf 分配一些内存。

      buf = (char *) malloc (bufsize);
      

      当你完成时:

      free (buf);
      

      或者把它变成一个字符数组。

      【讨论】:

        【解决方案4】:

        在 Ubuntu 10.10 上使用 gcc,上面的代码可以工作。

        malloc() 和 free() 可用于分配一些内存。 free() 在函数结束时被调用。

        buf = (char *) malloc (bufsize);
        

        这将为 buf 分配大小为 1024 的内存。

        【讨论】:

        • 它不起作用。它可能看起来有效。但是调用 UB 的代码被破坏了,句号。
        • 这就是我建议 malloc() 的原因。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        相关资源
        最近更新 更多