所以,我是C的新手。我试图为2D数组分配内存。每当它到达calloc时,它就会退出程序。我试图将其更改为malloc,但这也不起作用。(此外,我是匈牙利人,所以有些文本是匈牙利语)
下面是我如何声明我的矩阵以及如何将它给予给我的函数。
int** matrix = NULL;
matrixg(size, matrix);
字符串
下面是我认为与此相关的函数部分:
void matrixg(int* size,int** matrix2){
//Mátrix mérete
int k = 0;
char szamseged[11];
printf("How big should the matrix be? Under no cicumstance, type 0. (at least 1, maximum 20):\n");
getchar();
fgets(szamseged, 10, stdin);
int meret = atoi(szamseged);
while(meret == 0){
if(k == 1){
printf("I can do this all day.\n");
}
printf("Try again dummy!\n");
getchar();
fgets(szamseged, 10, stdin);
meret = atoi(szamseged);
k++;
}
*size = meret;
*matrix2 = calloc((*size), sizeof(int*));
for (int i = 0; i < (*size); i++) {
printf("na ez jó.");
matrix2[i] = calloc((*size), sizeof(int));
}
型
1条答案
按热度按时间ct3nt3jp1#
你的间接级别搞错了。假设成功了,这...
字符串
.设置
*matrix2
,也就是matrix2[0]
,指向一个足够大的分配块,用于int *
类型的*size
对象。这依赖于*matrix2
指定一个int *
类型的现有对象,这可能是你的问题。但即使这样也没问题,1.在循环中,使用不同的指针覆盖
matrix2[0]
,从而泄漏原始分配,1.所提供的代码中没有任何内容可以确保
matrix[1]
或matrix[i]
中的 any 指定有效对象。最有可能的是,你想要的东西更像这样:
型
你可以这样称呼它:
型
为了清楚起见,这确实省略了对分配成功的任何检查。但是,为了健壮性,您绝对应该验证每个分配是否成功,并在其中任何一个失败时采取适当的操作-可能是诊断消息和干净的关闭。