c - scanf 将数组传递给函数后出现段错误

标签 c

我正在尝试完成一个研讨会,但在 if 语句中调用 inputVector 函数后出现段错误。我不知道为什么它会给我一个错误。编译时没有警告,并且对数组进行的测试实际上显示了记录的内容。我正在运行 OSX Maverick,但我也在 Linux 系统上进行了测试,但没有成功。如果有人能阐明这一点,我将非常感激。

#include <stdio.h>
#include "matrix.h"

int main() {

    int row = 0 , col = 0, option = 0;
    int vector[9], result[9];
    int matrix[9][9];

    do{
        printf("Number of rows (0 to exit) ? ");
        scanf("%d", &row);
        if(row != 0) {
            printf("Number of columns          ? ");
            scanf("%d", &col);

            inputMatrix(row, col, matrix);

            printf("Pre (0) or Post (1) Multiply ? ");
            scanf("%d", &option);

            if(option == 0){
                inputVector(row, vector);
                printf("TESTING 1");
                preMulti(row, col, matrix, vector, result);
                printf("TESTING 2");
                display(col, result);
            }
            else if(option == 1){ 
                inputVector(col, vector);
                postMulti(row, col, matrix, vector, result);
                display(row, result);
            }

            return 0;       
        }// END IF
    } while( row != 0 );// End While

} // End Main

矩阵.cpp

#include "matrix.h"
#include <stdio.h>

void inputMatrix(int row , int col, int matrix[][MAXCOL]) {
    for ( int i = 0; i < row; i++) {
        printf("Row %d ? ", i + 1);
        for ( int k = 0; k < col; k++)
            scanf("%d", &matrix[i][k]);
    }
}
void inputVector(int size, int vector[]) {
    printf("Vector? ");
    for(int i = 0; i < size; i++){
        scanf("%d" , &vector[i]);
        printf(" Recorded %d \n", vector[i]);
    }
    printf("TESTING 3");
}

void preMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
    for(int i = 0; i < col; i++ ) {
        result[i] = 0;
        for( int k = 0; k < row; i++) 
            result[i] += vector[k] * matrix[k][i];
    }
}
void postMulti(int row, int col, int matrix[][MAXCOL], int vector[], int result[]) {
    for( int i = 0; i < row; i++ ) {
        result[i] = 0;
        for( int k = 0; k < col; i++) 
            result[i] += vector[k] * matrix[i][k];
    }
}

void display(int size, int vector[]) {
    printf("Result: ");
    for ( int i = 0; i < size; i++)
        printf("%d ", vector[i]);
}

最佳答案

这是您的问题(至少是导致段错误的问题),这种情况发生在多个地方,preMulti()postMulti():

for( int k = 0; k < row; i++) 

最后应该是 k++,而不是 i++

关于c - scanf 将数组传递给函数后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749316/

相关文章:

C - 如何在内存级别进行算术转换?

c - 仅在一个函数中出现 "variable_name"未声明错误

c - 对子进程的操作 C

c - ablkcipher_request_set_callback 有什么作用?

c - C : fork or fork + exec 中多处理应用程序的体系结构

c - 如何使用 C 中的套接字编程通过 Internet 连接两台计算机?

c - 如何在 C 中存储 unicode?

c - 需要帮助理解 C 程序以找到机器 IP 地址

c - 如何识别用户空间和内核空间之间的特定套接字?

c - 将特定库与 gcc 链接