[英]why is realloc() crashing after the 2nd loop?
這只是一個測試代碼,我一直在使用它來弄清楚代碼是如何工作的,然后才將它強加到我的程序中。 基本上同樣的問題發生在兩個程序中,我能夠重新分配2次然后它崩潰。 最后的項目是2d指針,列表長度和大小長度。 其中的一部分必須能夠調整到合理的限度。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char** tasks;
char buff[1089];
int size, i, list_size=1;
tasks = (char**)malloc(list_size * sizeof(char*));
printf("input a string!\n");
gets(buff);
*tasks[0]=(char*)malloc((strlen(buff)+1));
tasks[0]=buff;
printf("%s\n", tasks[0]);
for (i=1;i<8 ;i++){
list_size++;
printf("%d\n", list_size);
*tasks = realloc(*tasks, list_size* sizeof(char*));
printf("input a string!\n");
gets(buff);
*tasks[i]=(char*)malloc((strlen(buff)+1));
tasks[i]=buff;
printf("%s\n", tasks[i]);
}
free(tasks);
return 0;
}
我在這里搞砸了什么?
這里有幾個問題。
*tasks[0]=(char*)malloc((strlen(buff)+1));
正如David Heffernan在評論中指出的那樣,您正在指定一個指向char
的指針。 你可能只想分配給tasks[0]
。
tasks[0]=buff;
這不是您復制字符串的方式。 您將tasks[0]
設置為指向固定緩沖區,並泄漏您在上一步中分配的內存。
*tasks = realloc(*tasks, list_size* sizeof(char*));
這不是一種重新分配的安全方法,而且您還在重新分配錯誤的指針(列表中的第一個條目,而不是列表本身)。 如果分配失敗,您丟失了原始指針,並泄露了該內存。 您應該首先重新分配到臨時變量,如下所示:
char *temp = realloc(tasks, list_size* sizeof(char*));
if (temp != NULL)
tasks = temp;
最后,不要轉換malloc()
的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.