構造体メンバに4096の文字列を格納しようとしているというユニークなケースがあります。しかし、私は短い文字列のためのメモリの通常量をmallocingんだけど、まだvalgrindのエラーを取得しています:大きな文字列をmallocするときにサイズ1の読み込みが無効
#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
をしかし、秒を待って、文字列の長さをmallocingしています。ヌルターミネーターに1を加えて、ここで何が起こっていますか?
私もこの試みた事実:私もmalloc関数の呼び出し後に文字列を終了nullにしようとした
newList->name = malloc(sizeof(char) * strlen(bigString) +1);
と一体を:
newList->name[strlen(bigString)] = '\0';
無駄に...
I実際に私がここで間違ったことについて混乱しています。何か案は?
'bigString = malloc(sizeof(char)* 4096);' - > 'bigString = malloc(sizeof(char)* 4096 + 1); bigString [4096] = 0; ' – BLUEPIXY
サイズ1の無効な書き込みを返す:/ – ererere
' i <4096'を変更しましたか? – BLUEPIXY