【发布时间】:2019-01-16 14:28:33
【问题描述】:
所以,我有一个指针需要增加它的“长度”,直到用户插入一个负数或“e”。它以“1”的长度开始,通过malloc() 然后我在do{...} while(...) 循环中使用realloc() 函数来增加它的长度。代码如下:
int *array = malloc (sizeof(int) * 1);
bool exit = false;
int lastIndex = 0, value;
do {
printf ("Insert a positive number. Insert a negative number or \"e\" to exit: ");
int scanf_result = scanf("%i", &value);
if (scanf_result) {
if (value >= 0) {
array[lastIndex] = value;
lastIndex++;
array = (int*) realloc (array, lastIndex * sizeof(int));
} else {
exit = true;
}
} else {
exit = true;
}
} while (!exit);
我不明白为什么在第 7 个 cicle 之后它退出并出现错误 realloc(): invalid next size。
有什么想法吗?感谢您的建议。
【问题讨论】:
-
关于:
int scanf_result = scanf("%i", &value); if (scanf_result)'this' 调用到scanf()的返回值可以返回 0、1 或 EOF。所以if()语句无效。应该是:if( scanf_result == 1 )任何其他返回值都表示发生了错误。 -
关于:
array = (int*) realloc (array, lastIndex * sizeof(int));1) 在 C 中,来自malloc、calloc和realloc的返回值的类型为void*,可以分配给任何指针,铸造只会使代码,使其更难理解、调试等。 2) 在调用realloc()时,切勿将返回值直接赋给目标指针。而是分配给“临时”变量,然后检查 (!=NULL),如果成功,则从临时指针分配目标指针。否则当realloc()失败时原始指针丢失,导致内存泄漏 -
关于:
printf ("Insert a positive number. Insert a negative number or \"e\" to exit: ");建议输入“e”。 'e' 永远不会通过语句输入:if (scanf_result) {,因为格式字符串:“%i”。但是,程序可能会正确处理。但是,如果用户根据操作系统输入(或 ),这将被视为有效输入
标签: c pointers int malloc realloc