我尝试使用 realloc 函数分配并得到错误
i try to allocated with realloc function and get error
typedef struct{
char** strings_cmd;
int size_cmd;
}parseInfo;
.....
parseInfo* parse(char* cmd){
char* temp = strdup(cmd);
char* temp_split = strtok(temp," ");
int i = 0;
char** strings = (char**)malloc(sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings parse()\n");
exit(1);
}
while(temp_split != NULL){
strings[i++] = strdup(temp_split);
strings = realloc(strings,i * sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings (while) parse()\n");
exit(1);
}
temp_split = strtok(NULL," ");
}
strings[i] = NULL;
parseInfo* info = (parseInfo*)malloc(sizeof(parseInfo));
if(info == NULL){
printf("no memory allocated info parse()\n");
exit(1);
}
info->strings_cmd = strings;
info->size_cmd = i;
return info;
}
大家好,我收到错误消息:
realloc(): invalid next size.
我尝试做的是输入一个字符串并将其拆分成单词
例如我输入 =“Hello World”。
并拆分它 = "Hello" , "World"
但是当我传递 4 个单词时出现此错误...
这条线有问题:
strings = realloc(strings,i * sizeof(char*));
此行正在将数组大小调整为 i
个元素。
然后,在下一次迭代中,一些值被存储到数组的第 i
个元素(由 strings
指向)。该数组只有 i
个元素(0
到 i-1
),所以这是 out-of-range 访问。
分配足够的元素来修复:
strings = realloc(strings,(i + 1) * sizeof(char*));
另请注意,malloc()
家族的铸造结果是 considered as a bad practice。
对于初学者来说,该函数存在内存泄漏,因为在函数的开头分配了内存
parseInfo* parse(char* cmd){
char* temp = strdup(cmd);
//...
未释放。
在这个 while 循环中
while(temp_split != NULL){
strings[i++] = strdup(temp_split);
strings = realloc(strings,i * sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings (while) parse()\n");
exit(1);
}
temp_split = strtok(NULL," ");
你需要写
strings = realloc(strings, ( i + 1 ) * sizeof(char*));
为该语句中使用的终止空指针保留一个元素
strings[i] = NULL;
并且您需要在函数开头释放动态分配的内存,例如
free( temp );
}
您正在分配一个指针数组,其所需元素少了一个。
typedef struct{
char** strings_cmd;
int size_cmd;
}parseInfo;
.....
parseInfo* parse(char* cmd){
char* temp = strdup(cmd);
char* temp_split = strtok(temp," ");
int i = 0;
char** strings = (char**)malloc(sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings parse()\n");
exit(1);
}
while(temp_split != NULL){
strings[i++] = strdup(temp_split);
strings = realloc(strings,i * sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings (while) parse()\n");
exit(1);
}
temp_split = strtok(NULL," ");
}
strings[i] = NULL;
parseInfo* info = (parseInfo*)malloc(sizeof(parseInfo));
if(info == NULL){
printf("no memory allocated info parse()\n");
exit(1);
}
info->strings_cmd = strings;
info->size_cmd = i;
return info;
}
大家好,我收到错误消息:
realloc(): invalid next size.
我尝试做的是输入一个字符串并将其拆分成单词 例如我输入 =“Hello World”。 并拆分它 = "Hello" , "World"
但是当我传递 4 个单词时出现此错误...
这条线有问题:
strings = realloc(strings,i * sizeof(char*));
此行正在将数组大小调整为 i
个元素。
然后,在下一次迭代中,一些值被存储到数组的第 i
个元素(由 strings
指向)。该数组只有 i
个元素(0
到 i-1
),所以这是 out-of-range 访问。
分配足够的元素来修复:
strings = realloc(strings,(i + 1) * sizeof(char*));
另请注意,malloc()
家族的铸造结果是 considered as a bad practice。
对于初学者来说,该函数存在内存泄漏,因为在函数的开头分配了内存
parseInfo* parse(char* cmd){
char* temp = strdup(cmd);
//...
未释放。
在这个 while 循环中
while(temp_split != NULL){
strings[i++] = strdup(temp_split);
strings = realloc(strings,i * sizeof(char*));
if(strings == NULL){
printf("no memory allocated strings (while) parse()\n");
exit(1);
}
temp_split = strtok(NULL," ");
你需要写
strings = realloc(strings, ( i + 1 ) * sizeof(char*));
为该语句中使用的终止空指针保留一个元素
strings[i] = NULL;
并且您需要在函数开头释放动态分配的内存,例如
free( temp );
}
您正在分配一个指针数组,其所需元素少了一个。