【问题标题】:EXC_BAD_ACCESS when calling printf()调用 printf() 时的 EXC_BAD_ACCESS
【发布时间】:2015-09-13 20:28:59
【问题描述】:

这是怎么回事?

int main(int argc, char** argv) {

printf("%% ");
size_t len;
ssize_t read;
char* line;
int size;

read = getline(&line, &len,stdin);
printf("my name: %s\n",argv[0]);
printf("%s",line);
char* args[]= {"yoyoyo","hi","me",NULL};

return 0;
}

调试显示异常:EXC_BAD_ACCESS (code=1, address=0xa66647360))

printf("我的名字:%s\n",argv[0]); 线。

【问题讨论】:

    标签: c unix printf


    【解决方案1】:

    您忘记初始化提供给getline() 的值。

    改用char *line = NULL;size_t len = 0;

    man 3 getline 手册页有一个您可以修改的示例。

    【讨论】:

      【解决方案2】:

      我怀疑你的问题不在于那一行,而在于这个:

      read = getline(&line, &len,stdin);
      

      line 被声明为 char * 并且没有指向任何东西。因此,您正在将数据读入未初始化指针的内存位置,这就是您收到访问错误的原因。

      尝试静态分配行:

      char line[256]; // or whatever line length you want
      read = getline(&line, &len, stdin);
      

      或使用 malloc:

      char *line = malloc(sizeof(char) * 256);
      read = getline(line, &len, stdin);
      

      但要小心溢出您设置的任何长度。祝你好运!

      【讨论】:

      • 不,OP 使用的是getline(),一个 POSIX.1 函数,而不是 fgets()getline() 做动态内存管理,你应该给它一个指向指针的指针,一个指向分配大小的指针,以及流;问题是 OP 没有正确初始化前两个值。
      猜你喜欢
      • 2017-04-03
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多