【问题标题】:Invalid write of size 4 when malloc [closed]malloc时大小为4的无效写入[关闭]
【发布时间】:2012-09-16 19:31:08
【问题描述】:

我的程序是这样的:

char *line = "hello a b c d e f g ";
/* split it into words */
char **argv = NULL;
**argv = malloc(sizeof(char*));
if (*argv = NULL)
    printf("null malloc");
    printf("malloc ok");
    int i;
    for (i=0;;i++){
        printf("i=%d", i);
        line = strwrd(line, argv[i], 1024, " \t");
        printf("strwrk ok");
        if (argv[i] = NULL)
             break;
        **argv = realloc(*argv, (i+2)*sizeof(char*));   
        printf("realloc ok");
    }
}

当我在 valgrind 中运行它时,它会说:

==22169== Invalid read of size 4
==22169==    at 0x804858B: main (printTest.c:27)
==22169==  Address 0x0 is not stack'd, malloc'd or (recently) free'd

因为我是 C 菜鸟,所以我不知道 malloc 是否有问题。

【问题讨论】:

  • 正在mallocing 空间的结果分配给char *char,更不用说像您一样取消引用空指针了。跨度>
  • if (*argv = NULL) 是一个赋值,你应该比较是否相等:if (*argv == NULL)。我最初将其发布为答案,但这里至少还有 5 个其他问题,所以我放弃了。

标签: c malloc valgrind


【解决方案1】:
**argv = malloc(sizeof(char*));

应该是

argv = malloc(sizeof(*argv));

【讨论】:

  • 注意:请阅读更多教程和/或仔细阅读它们。这太基础了。
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2016-07-23
  • 2014-01-13
  • 2021-12-15
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多