如何解决正确分配内存和释放?
这是为 2 个未知大小的数组分配内存的代码。 N 由用户给出:
K=malloc(N*sizeof(int));
if(K==NULL){
// printf("Sorry,cannot allocate memory\n");
return -1;
}
for(i = 0;i < N;i++){
C = malloc(N * sizeof(int *));
if (C == NULL){
return -1;
}
for (i = 0 ; i < N ; i++) {
*(C+i) = malloc(K[i] * sizeof(int));
if (*(C+i) == NULL){
return -1; }
}
}
两个数组都填充了用户给出的数字。 并释放他们:
for (i=0 ; i < N ; i++){
for (i=0 ; i < N ; i++){
free(*(C+i));
}
free(C);
}
void free(void*K);
通过使用 gbd 进行调试,我遇到了这个错误
程序收到信号SIGSEGV,分段错误。 _int_free (av=0x10102464c457f,p=0x8005770,have_lock=) 在 malloc.c:4304 4304 malloc.c: 没有那个文件或目录。
通过使用 valgrind 更深入地研究这个错误,我似乎没有泄漏。可能是什么问题?
解决方法
for(i = 0;i < N;i++){int *));
if (C == NULL){
return -1;
}
每次迭代时,之前分配的内存都会丢失,因为指针被分配了对新分配内存块的引用。
如果您打算更改已分配内存的大小,则应改用 realloc
假设 C 是 int **
(根据您的程序逻辑)
C = NULL;
for(i = 0;i < N;i++){
void *tmp = realloc(C,N * sizeof(*C));
if (tmp == NULL){
free(C);
return -1;
}
C = tmp;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。