在函数内初始化2D数组,通过指针调用。获取分段错误

时间:2017-02-18 02:41:47

标签: c++ pointers multidimensional-array

此程序的目标是立即设置2D数组的每个数组变量

char mass_data_shift [9] [9]; 等于'T'。整体应该等于100 Ts。

这是通过使用此2D数组地址作为参数调用void函数来完成的。通过指针调用它然后在循环中初始化。

循环内部是2D数组应该设置为T.

* mass_data [mass_data_counter] [mass_data_counter_two] ='T';

然而......程序导致:

  • (最常见)尝试初始化后的分段错误 * mass_data [4] [2]
  • (有时)程序成功(?)运行后的分段错误。
  • (有时)程序成功运行。

意味着程序在某个地方写出了界限。任何帮助都将在程序运行时没有分段错误和/或修复其他错误。

#include <stdlib.h>
#include <stdio.h>
#include <iostream>

void mass_data_define(char (*mass_data)[9][9]){

  int mass_data_counter;
  int mass_data_counter_two = 0;

  for (mass_data_counter=0;mass_data_counter<9;mass_data_counter++){
    do {    
      std::cout << "|Array #1   " << mass_data_counter
                << "   :::   |Array #2    " << mass_data_counter_two 
                << std::endl;

      *mass_data[mass_data_counter][mass_data_counter_two] = 'T';

      std::cout << *mass_data[mass_data_counter][mass_data_counter_two];

      mass_data_counter_two++;
      std::cout << "---------End of Counter 2 Init Code----------" << std::endl;
    } while (mass_data_counter_two < 9);

    mass_data_counter_two = 0;
  }
}

int main()
{
    char mass_data_shift[9][9];

    mass_data_define(&mass_data_shift);

    std::cout << "-END-" << std::endl;

    return 0;
}

最终编辑:主要原因是由下面的szym解决的。对于空白和丢失的iostream感到抱歉,当我发帖时,这是一个格式问题。还改变了循环以适合数组长度,如下所示。

2 个答案:

答案 0 :(得分:1)

*mass_data[mass_data_counter][mass_data_counter_two] = 'T';

应该是

(*mass_data)[mass_data_counter][mass_data_counter_two] = 'T';

当然,同样适用于该行:

std::cout << *mass_data[mass_data_counter][mass_data_counter_two]

但实际上这个指针类型不需要在C / C ++中通过引用传递数组。

您应该声明:

void mass_data_define(char mass_data[9][9]) {
    // To read:
    char z = mass_data[3][6];
    // To write:
    mass_data[2][1] = 'C';
}

// elsewhere
char my_mass_data[9][9];
mass_data_define(my_mass_data);

答案 1 :(得分:0)

简答:这是对您的代码的单行修复,因此可能会继续使用指针,但会出现分段错误:

        (*mass_data)[mass_data_counter][mass_data_counter_two] = 'T';

长答案:阅读Create a pointer to two-dimensional array

要深入了解如何使用指针访问多维数组,请阅读this