【发布时间】: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 个其他问题,所以我放弃了。