gpt4 book ai didi

c - realloc 导致指针数组的 glibc 错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:30 25 4
gpt4 key购买 nike

我有一些 C 代码,其中包含我试图以下列方式操作的文本数组:-

  • 分配一个指针数组dictionary,大小为dictionary_size,初始化为50
  • 用'\0'替换所有空格和\n
  • dictionary 中存储每 3 个字符串的地址(由未知数量的\n 或空格分隔)
  • 如果 dictionary 已满,重新分配大小,dictionary_size * 2

然而,该代码会导致以下错误:-

*** glibc detected *** ./crack: realloc(): invalid next size: 0x0000000001386010 ***
^Cmake: *** [run] Interrupt

代码如下:-

 // Replace all spaces with '\0'
for ( i = 0; i < file_size; i++ ) {
if ( temp_buffer[i] == ' ' || temp_buffer[i] == '\n' ) {
while ( temp_buffer[i] == ' ' || temp_buffer[i] == '\n' ) {
temp_buffer[i] = '\0';
}
j++;
}
if ( (j-1) % 3 == 0 ) {
dictionary[k] = temp_buffer+i;
k += 1;
if ( k == dictionary_size ) {
dictionary_size *= 2;
printf("Going to realloc to %d\n", dictionary_size);
dictionary = (char **)realloc(dictionary, dictionary_size);
}
}
}

[编辑]根据我的调试语句,第一个 realloc(大小为 100)失败。

最佳答案

dictionary_size 是元素(指针)计数,而不是分配大小。应该是 dictionary_size * sizeof(char*)

dictionary = realloc(dictionary, dictionary_size * sizeof(*dictionary)); // safer, 10x @alk

或者(不太推荐):

dictionary = realloc(dictionary, dictionary_size * sizeof(char*));       // clearer

还要检查 dictionary_size 是否已正确初始化。

关于c - realloc 导致指针数组的 glibc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112727/

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