双指针,动态分配和使用指针数组

时间:2016-10-04 23:19:19

标签: c arrays string pointers malloc

所以我已经将代码缩小到我需要帮助的范围。对不起之前的文字墙和杂乱的代码。

// Headers
#include <stdio.h>
#include <stdlib.h>

// Function Protype
void test_function(int **ptr2);

// Main Function
int main(void) {
    int *ptr1;
    int i = 0; // Counter

    test_function(&ptr1); // Calling function

    for (i = 0; i < 10; i++) {
        printf("%d", ptr[i]); // Should print numbers from 0-9
    }

    return 0;
}

// Custom Function
void test_function(int **ptr2) {
    // Variables
    int i = 0; // Counter
    int j = 0; // Dynamic allocator

    *ptr2 = malloc(sizeof(int) * j); // Allocates 10 slots of size int

    for (i = 0; i < 10; i++) {
        *ptr2[i] = i; // <----- This line gives a segmentation fault error
    }

    return;
}

所以基本上,这个程序应该使用malloc迭代数组来分配动态大小j,输入数字0-9并向用户显示0-9。但是,注释的函数test_function中的行给了我一个分段错误错误。

2 个答案:

答案 0 :(得分:1)

*ptr2[i] = i;行应为:

(*ptr2)[i] = i;

你拥有它的方式意味着*(ptr2[i])这是一个错误,因为ptr2只指向一件事。

答案 1 :(得分:0)

int *spacePos = NULL;

find_spaces(name, &spaceCount, &spacePos);

SpacePos已经是指向int的指针,并且指针指向存储整数的内存中的某个空间。此指针地址存储在内存Where in memory are my variables stored in c?中数据段某处的地址&SpacePos的内存中。

当你将'SpacePos'的地址传递给一个函数并对其进行操作时,实际上你正在改变存储在SpacePos中的指针值而不是它指向的指针值,并且会产生一个seg错误。 (你实际上改变了存储在SpacePos中的内存地址,现在你指向无效的内存)

What does "dereferencing" a pointer mean?

尝试find_spaces(name, &spaceCount, spacePos); 希望它有所帮助。

######################### 第2部分

void test_function(int **ptr2) {

int i = 0; // Counter
int j = 10; // Dynamic allocator
*ptr2 = malloc(sizeof(int) * j); // Allocates 10 slots of size int

for (i = 0; i < 10; i++) {
    *((*ptr2)+i) = i; // <----- This line gives a segmentation fault error
}

return;

}