gpt4 book ai didi

c - 分配大字符串时大小 1 的读取无效

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:01 24 4
gpt4 key购买 nike

我有一个独特的案例,我试图在结构成员中存储一个 4096 个字符的字符串。但是,我为较短的字符串分配了通常的内存量,但仍然收到 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);

返回错误大小为 1 的无效读取

但等一下,我正在 malloc 字符串的长度,加上 1 作为空终止符,这是怎么回事?

事实上我什至试过这个:

newList->name = malloc(sizeof(char) * strlen(bigString) +1);

我什至试图在 malloc 调用后以 null 终止字符串:

newList->name[strlen(bigString)] = '\0';

没用..

我实际上对我在这里做错了什么感到困惑。有什么想法吗?

最佳答案

bigString 本身不是以 null 结尾的,因此 strlen(bigString) 导致尝试读取分配给 bigString 的空间末尾>.

关于c - 分配大字符串时大小 1 的读取无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com