所以我已经将代码缩小到我需要帮助的范围。对不起之前的文字墙和杂乱的代码。
// 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
中的行给了我一个分段错误错误。
答案 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);
希望它有所帮助。
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;
}