出于某种原因,当我对stringArr [n]进行malloc时,strArr [n-1]的值要么添加'!'最后或用'!'替换最后一个字符。在GDB中,当分配给strArr [n]时,字符串看起来是查找但是当n递增时,当mallocing strArr [n](在这种情况下为n + 1)时,strArr [n-1]得到'!'添加。我不知道为什么会这样。
char** stringArr = malloc(sizeof(char*)*28);
char* token;
int n = 0;
while(n < 28)
{
token = //tokenize something here
stringArr[n] = malloc(sizeof(token)+1);
strcpy(stringArr[n], token);
}
答案 0 :(得分:2)
stringArr[n] = malloc(sizeof(token)+1);
你不想要这个。因为指针的sizeof
是固定的(对于系统而言)。因此,您要分配固定长度的字符串来复制每个标记化的字符串(其长度可能超过您分配的长度)。所以strcpy
正在访问甚至没有分配的内存。这是未定义的行为。
这将是
stringArr[n] = malloc(strlen(token)+1);
现在您要确保动态分配的内存的长度能够保存要复制的字符串(NUL终止的char数组)。
另外,检查malloc
的返回值。 malloc
失败的情况不会遇到访问它的未定义行为。完成后,释放动态分配的内存。