Arrays C-在2D数组之后释放内存
我有个问题。我创建了一个二维数组,最后,我想释放它。我的代码中哪里有问题? 如果我运行我的程序,一切正常,直到结束。它永远不会打印成功!,所以我认为在那之前它就已经过时了。有什么帮助吗? 这是我的密码:Arrays C-在2D数组之后释放内存,arrays,c,free,Arrays,C,Free,我有个问题。我创建了一个二维数组,最后,我想释放它。我的代码中哪里有问题? 如果我运行我的程序,一切正常,直到结束。它永远不会打印成功!,所以我认为在那之前它就已经过时了。有什么帮助吗? 这是我的密码: #include<stdio.h> #include<stdlib.h> int main() { int n=5; int size=51; char **a_name=(char**)malloc(sizeof(char*)*n);
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n=5;
int size=51;
char **a_name=(char**)malloc(sizeof(char*)*n);
for(int i=0;i<n;i++){
a_name[i]=(char*)malloc(sizeof(char)*size);
scanf("%s",a_name[i]);
}
for(int i=0;i<n;i++){
printf("%s\n",a_name[i]);
}
n=6;
*a_name=realloc(*a_name,sizeof(char*)*n);
scanf("%s",a_name[n-1]);
printf("\n");
for(int i=0;i<n;i++){
printf("%s\n",a_name[i]);
}
for(int i=0;i<n;i++){
free(a_name[i]);
}
free(a_name);
printf("Succes!\n");
return 0;
}
#包括
#包括
int main()
{
int n=5;
int size=51;
char**a_name=(char**)malloc(sizeof(char*)*n);
对于(inti=0;i首先,改变
*a_name = realloc(*a_name, sizeof(char*) * n);
到
您不希望将字符串数组(a_名称
)的内容重新分配到其中一个字符串本身(*a_名称
)
其次,问题的根源是,在调用realloc之后,您没有像在这里那样对新添加的a_name
元素调用malloc:
for(int i=0;i<n;i++) {
a_name[i] = (char*)malloc(sizeof(char) * size); // here you allocated a 51 byte block for each char*
scanf("%s", a_name[i]);
}
您的最终代码应该如下所示
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n = 5;
int size = 51;
char **a_name = (char**)malloc(sizeof(char*)*n);
for (int i = 0; i < n; i++) {
a_name[i] = (char*)malloc(sizeof(char)*size);
scanf("%s", a_name[i]);
}
for (int i = 0; i < n; i++) {
printf("%s\n", a_name[i]);
}
n = 6;
a_name = (char**)realloc(a_name, sizeof(char*) * n);
a_name[n - 1] = (char*)malloc(sizeof(char) * size); // allocate memory for the string first
scanf("%s", a_name[n - 1]);
printf("\n");
for (int i = 0; i < n; i++) {
printf("%s\n", a_name[i]);
}
for (int i = 0; i < n; i++) {
free(a_name[i]);
}
free(a_name);
printf("Success!\n");
return 0;
}
#包括
#包括
int main()
{
int n=5;
int size=51;
char**a_name=(char**)malloc(sizeof(char*)*n);
对于(int i=0;i
*a_name=realloc(*a_name
删除那些*
最后一个元素从未分配。您需要a_name[n-1]=(char*)malloc(sizeof(char)*size)char**a_name
读取为指向char的指针。Realloc接受指针。因此,您传递a_name
。额外的*是取消对它的引用并传递指向char的指针。请省去我们查看屏幕截图的麻烦。将输出文本直接粘贴到问题中。该屏幕中的数千像素他们并没有做任何事情来帮助理解这个问题,他们只是混淆了底部的输出,应该以文本形式保存。
a_name[n - 1] = (char*)malloc(sizeof(char) * size);
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n = 5;
int size = 51;
char **a_name = (char**)malloc(sizeof(char*)*n);
for (int i = 0; i < n; i++) {
a_name[i] = (char*)malloc(sizeof(char)*size);
scanf("%s", a_name[i]);
}
for (int i = 0; i < n; i++) {
printf("%s\n", a_name[i]);
}
n = 6;
a_name = (char**)realloc(a_name, sizeof(char*) * n);
a_name[n - 1] = (char*)malloc(sizeof(char) * size); // allocate memory for the string first
scanf("%s", a_name[n - 1]);
printf("\n");
for (int i = 0; i < n; i++) {
printf("%s\n", a_name[i]);
}
for (int i = 0; i < n; i++) {
free(a_name[i]);
}
free(a_name);
printf("Success!\n");
return 0;
}