【问题标题】:Malloced char* but crashes and says it's not mallocedMalloced char* 但崩溃并说它没有 malloced
【发布时间】:2016-03-12 05:00:40
【问题描述】:

我正在分配一个字符串

int main(){
    int buf = 1024;
    char *input = malloc(sizeof(char*) * buf);

    //CODE
    scanf("%s", input);
    //MORE CODE

    free(input);
}

如果我没有将输入字符串设置为任何它可以工作的东西,那么当它设置为某物时它会崩溃。

malloc: *** error for object 0x100f01efa: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

我认为我做对了,但不确定它为什么会崩溃。

【问题讨论】:

  • 我假设您使用的是 MORE CODE 部分中的指针。那也很高兴。此处显示的任何内容都不会显示问题。
  • 考虑在整个程序中使用valgrind

标签: c malloc scanf


【解决方案1】:

您需要malloc 字符而不是字符指针。

即改变

sizeof(char*)

1

或者直接放

char *input = malloc(buf);

【讨论】:

  • 虽然这是真的,但它仍然不能解释所讨论的问题。分配比需要更多的内存不会导致释放它的问题。
【解决方案2】:

在我不久前想出来的时候发布我的问题的答案。

我需要更改 sizeof 以获取单个字符的大小,而不是指针。

char *input = malloc(sizeof(char) * buf);

【讨论】:

  • 你是对的。但是sizeof(char) 始终为 1。而sizeof(char*) 可能更多(通常为 4 或 8)。所以你的原始代码只是malloc-ed 比需要更多的内存,所以这不是错误的真正原因。
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 2015-12-29
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
相关资源
最近更新 更多