下列代码运行出错,可能会是哪一行引起的?
void getMemory(char *p) { p = (char *)malloc(100); // 1 } int main(int argc, char const *argv[]) { char *str = NULL; getMemory(str); strcpy(str, "hello wrold"); // 2 printf("%s\n", str); // 3 free(str); // 4 }
1 2 3 4 | void getMemory(char *p) { p = (char *)malloc(100); } |
void getMemory(char **p) { *p = (char *)malloc(100); // 1 } int main(int argc, char const *argv[]) { char *str = NULL; getMemory(&str); strcpy(str, "hello wrold"); // 2 printf("%s\n", str); // 3 free(str); // 4 getchar(); return 0; }
在函数getMemory中,我们传递了一个指向字符的指针p。然后,在第1行中,我们试图为p分配内存并将其指向新分配的内存块。
然而,需要注意的是,C语言中的参数传递是通过值传递进行的。这意味着在函数getMemory中,我们虽然修改了指针p的值,但这个修改不会影响到main函数中的实际参数str。
因此,当我们在main函数中的第2行尝试使用strcpy复制字符串到str指向的内存时,str仍然是NULL,没有指向有效的内存块。这将导致未定义行为和错误。
所以,选项B中的第2行代码strcpy(str, "hello wrold");可能会引起代码运行错误。