我有一种独特的情况,我试图将4096个字符串存储在struct成员中。但是,我通常为较短的字符串分配内存量,但仍然收到valgrind错误:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct List {
char * name;
int grade;
struct List * next;
};
int main(void) {
struct List * newList;
char * bigString;
int i;
bigString = malloc(sizeof(char)* 4096);
for (i=0; i<4096; i++)
bigString[i] = 'a';
newList = malloc(sizeof(struct List));
newList->next = NULL;
newList->name = malloc(strlen(bigString)+1);
free(bigString);
free(newList->name);
free(newList);
return 0;
}
该行:
newList->name = malloc(strlen(bigString)+1);
返回错误 Invalid read of size 1
但是,请稍等,我正在分配字符串的长度,再为空终止符加1,这是怎么回事?
实际上,我什至尝试过:
newList->name = malloc(sizeof(char) * strlen(bigString) +1);
甚至在malloc调用之后,我什至试图使字符串终止为null:
newList->name[strlen(bigString)] = '\0';
无济于事。
对于我在这里做错了什么,我实际上是感到困惑。有任何想法吗?
bigString
本身不是以Null结尾的,因此strlen(bigString)
导致尝试读取为分配的空间的末尾bigString
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句