【发布时间】:2022-01-16 19:24:21
【问题描述】:
在为我的系统编程课程练习时,我尝试用一种方法创建二维数组,然后在另一种方法中用 1 填充偶数位。 但是,将数组作为参数传递或将其作为全局变量都不起作用。
通过的参数版本:
#include <stdio.h>
#include <stdlib.h>
int rows;
int cols;
int* create (size_t r, size_t c)
{
int* arr = (int*)malloc(r*c*sizeof(int));
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
*(arr + i*c + j) = 0;
printf("%d",*(arr + i*c + j));
}
printf("\n");
}
}
void evenFill(int* array){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
if(j%2==0){
*(array + i*cols + j) = 1;
}
}
}
}
void printArr(int* array){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
printf("%d", *(array + i*cols + j));
}
}printf("\n");
}
int main() {
printf("Hello, World!\n");
rows = 5;
cols = 5;
int* array = create(rows, cols);
evenFill(array);
printArr(array);
return 0;
}
全局变量版本:
#include <stdio.h>
#include <stdlib.h>
int rows;
int cols;
int* array;
int* create (size_t r, size_t c)
{
int* arr = (int*)malloc(r*c*sizeof(int));
int i,j;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
*(arr + i*c + j) = 0;
printf("%d",*(arr + i*c + j));
}
printf("\n");
}
}
void evenFill(){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
if(j%2==0){
*(array + i*cols + j) = 1;
}
}
}
}
void printArr(){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
printf("%d", *(array + i*cols + j));
}
}printf("\n");
}
int main() {
printf("Hello, World!\n");
rows = 5;
cols = 5;
array = create(rows, cols);
evenFill();
printArr();
return 0;
}
这两种变体在初始函数调用 evenFill() 后终止程序,退出代码 -1073741819 (0xC0000005) 显然与非法访问有关。
我做错了什么?
【问题讨论】:
-
您声明
create返回int *,但它实际上返回了什么? -
总是在编译时出现警告:
-Werror -Wall -Wextra
标签: arrays c multidimensional-array clion