【发布时间】:2017-03-11 17:55:55
【问题描述】:
我正在使用一个数组,我尝试了以下代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char **q = (char*)malloc(1*sizeof(char*));
q[0]="So Many Books";
q[1]="So Many Books";
q[2]="So Many Books";
q[3]="So Many Books";
q[4]="So Many Books";
printf("%s\n",q[0]);
printf("%s\n",q[1]);
printf("%s\n",q[2]);
printf("%s\n",q[3]);
printf("%s\n",q[4]);
return 0;
}
为什么编译器在这里没有给我一个错误? 我只为字符串数组中的一个字符串预订了位置。
我查看了一些资源,例如:
【问题讨论】:
-
没有语法错误,所以没有编译器错误。在
c中,内存管理取决于程序员。听起来您已经知道您的代码中充斥着 UB。 -
你是一名 C 程序员。假设您知道自己在做什么。如果您想手持,请选择其他语言。这对初学者来说尤其困难,但心态是“程序员知道他们在做什么”,即使很明显他们不知道。
-
当您需要
char **时,为什么要将malloc的结果转换为char *?你为什么要封装malloc的结果??? -
编译器不知道你没有分配足够的内存;这是一个直到编译时才会出现的问题。一个足够聪明的编译器可能能够解决这个问题,但通常传递给
malloc的参数不必是编译时常量,并且无法检测到这种错误所有情况。 -
不是关于手持,但不应该停止?因为我在未预订的地方分配?
标签: c arrays pointers dynamic-memory-allocation