gpt4 book ai didi

c - c中函数内部的Malloc用法

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

我试图传递一个指向函数的指针。在这个函数中我使用 malloc 来保留空间。问题是当我在 main 中返回时程序没有响应。这是我的简化代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int def(char **B){
int i;
B = malloc(3 * sizeof( char ));
for(i = 0; i < 2 ; i++){
B[i] = malloc(5 * sizeof(char));
}
for(i = 0; i < 2 ; i++){
scanf("%s" , B[i]);
}
for(i = 0; i < 2 ; i++){
printf("%s\n" , B[i]);
}
return 0;
}

int main(int argc, char *argv[]) {
char **B;
int i;
def(B);
for(i = 0; i < 2 ; i++){
printf("%s\n" , B[i]);
}
return 0;
}

最佳答案

int def(char **B)

应该是

char** def(char **B) 

它的返回值应该是

return B; 
/* else the memory allocated inside the function will be freed at
* the end and by accessing it later you have undefined behavior for the
* rest of the program
*/


B = malloc(3 * sizeof( char ));

应该是

B = malloc(3 * sizeof( char*)); // you have two levels of indirection. so char* first


for(i = 0; i < 2 ; i++) // similary with the other for loops

应该是

 for(i = 0; i < 3 ; i++) // you used 3 in the above step


def(B);

应该是

B=def(B);

使用 free() 释放分配的内存是一个很好的做法,尽管它会在程序结束时自动释放

关于c - c中函数内部的Malloc用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921145/

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