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

错误的

我有一种独特的情况,我试图将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';

无济于事。

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

Aschepler

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当字符串文字以换行符\ n结尾时,strdup对大小4的读取无效

来自分类Dev

使用scanf读取大字符串时出现SegFault / Abort

来自分类Dev

读取XML数据时超出了最大字符串内容长度

来自分类Dev

使用valgrind时无效读取大小1

来自分类Dev

插入大字符串时Emacs变慢

来自分类Dev

传递大字符串时出现OutOfMemoryError

来自分类Dev

显示大字符串时如何避免延迟?

来自分类Dev

写入dom节点php时,大字符串被截断

来自分类Dev

将文本文件的内容读取到字符串时,字符无效

来自分类Dev

读取未知大小的字符串

来自分类Dev

在Android Studio中串联字符串时的最大字符串长度

来自分类Dev

以最大字符分割字符串

来自分类Dev

访问时未分配字符串

来自分类Dev

找出Redis数据库中键的最大字符串值大小

来自分类Dev

执行unicode大小写折叠后的最大字符串长度

来自分类Dev

超过 110 字节的大字符串的 SealedObject 大小错误

来自分类Dev

如何从Blazor WebAssembly中的sessionStorage读取大字符串?我的结果被截断了

来自分类Dev

从文件读取时字符串损坏

来自分类Dev

从文件读取时字符串损坏

来自分类Dev

大字符串的Rabin Karp算法

来自分类Dev

在C中输入大字符串

来自分类Dev

播放框架:大字符串形式

来自分类Dev

$ _POST大字符串卡住

来自分类Dev

用JavaScript处理大字符串

来自分类Dev

使用javascript中的大字符串

来自分类Dev

处理大字符串的内存问题

来自分类Dev

合并包含 httpURl 的大字符串

来自分类Dev

连续的字符串替换导致C中的无效读取

来自分类Dev

下标分配尺寸不匹配。在分配字符串时