c-我试图在内存中放入一些数字并打印出来,但我的代码只是停止,没有任何问题消息



这是我第一次提问,所以我的解释可能很糟糕。。。。。

我想为arr1和arr2分配内存,分别存储和输出四个数字。编译没有问题,但如果你运行代码,程序会自动将第三个数字放入内存arr1。

#include <stdio.h>
#include <stdlib.h>
void ARR1_INPUT(int **arr1, int size)
{
*arr1 = (int *)malloc(sizeof(int) * size);
if (arr1 != NULL)
{
for (int i = 0; i < size; i++)
{
printf("put your number of %d index -> ", i + 1);
scanf("%d", arr1[i]);
}
}
else printf("Memory allocation fail");
}

void ARR2_INPUT(int **arr2, int size){
*arr2 = (int *)malloc(sizeof(int) * size);
if (arr2 != NULL)
{
for (int i = 0; i < size; i++)
{
printf("put your number of %d index -> ", i + 1);
scanf("%d", arr2[i]);
}
}
else printf("Memory allocation fail"):
}
int main(void){
int size;
int *arr1;
int *arr2;
printf("how many number are you gonna put in each memory -> "); scanf("%d", &size);
ARR1_INPUT(&arr1, size);
ARR2_INPUT(&arr2, size);
printf("%d, %d, %d, %d", arr1[0], arr1[1], arr1[2], arr1[3]);
printf("%d, %d, %d, %d", arr2[0], arr2[1], arr2[2], arr2[3]);
free(arr1);
free(arr2)
}

非常感谢你的帮助!

代码中存在一些错误。我将发布第二个函数并附上评论。大多数情况下,这是因为间接性水平不对。

void ARR2_INPUT(int **arr2, int size){
*arr2 = malloc(sizeof(int) * size);     // cast is undesirable
if (*arr2 != NULL)                      // was incorrect level of indirection
{
for (int i = 0; i < size; i++)
{
printf("put your number of %d index -> ", i + 1);
scanf("%d", &(*arr2)[i]);        // was incorrect level of indirection
}
}
else printf("Memory allocation fail");  //: was syntax error
}

同样正如所评论的,代码报告的正好是4个数组元素:这应该在size控制的循环中完成。

还可以进行其他改进,例如检查scanf调用的返回值,以及更好地跟踪失败的内存分配。

最新更新