当错置大字符串时,读取大小为1的数据无效



我有一个独特的情况,我试图在一个结构体成员中存储一个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);

返回错误Invalid read of size 1

等一下,我错配了字符串的长度,加上空终止符1,这是怎么回事?

事实上,我甚至试过这样做:

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

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

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

To no avail.

我真的不知道我在这里做错了什么。什么好主意吗?

bigString本身不是null终止的,因此strlen(bigString)导致试图读取超过分配给bigString的空间的末尾。

您忘记在BigString后面添加

相关内容

  • 没有找到相关文章

最新更新