我已經創建了一個C結構類型爲這樣:指針結構返回錯誤值用C
typedef struct {
int* data;
unsigned int len;
} intarr_t;
我試圖從一個指針中存取權限len
到我(顯然)成功創建intarr_t對象。下面是兩個文件,這我在這裏工作......
intarr.h
/* Structure type that encapsulates our safe int array. */
typedef struct {
int* data;
unsigned int len;
} intarr_t;
/* A type for returning status codes */
typedef enum {
INTARR_OK,
INTARR_BADARRAY,
INTARR_BADINDEX,
INTARR_BADALLOC,
INTARR_NOTFOUND
} intarr_result_t;
// Create a new intarr_t with initial size len. If successful
// (i.e. memory allocation succeeds), returns a pointer to a
// newly-allocated intarr_t. If unsuccessful, returns a null pointer.
intarr_t* intarr_create(unsigned int len);
// If index is valid, set the value at ia->data[index] to val and return
// INTARR_OK. Otherwise, leave the array unmodified and return
// INTARR_BADINDEX. If ia is null, return INTARR_BADARRAY.
intarr_result_t intarr_set(intarr_t* ia,
unsigned int index,
int val);
intarr.c
#include <stdio.h>
#include <stdlib.h>
#include "intarr.h"
intarr_t* intarr_create(unsigned int len) {
intarr_t original;
original.len = len;
original.data = malloc(original.len * sizeof(int));
//populate with values
for (int i = 0; i < original.len; i++) {
original.data[i] = i;
}
if (original.data == 0) {
intarr_t* originalp = NULL;
return originalp;
}
else {
intarr_t* originalp = &original;
return originalp;
}
}
intarr_result_t intarr_set(intarr_t* ia,
unsigned int index,
int val) {
if (ia == NULL) {
printf("%s\n", "error: array is null");
return INTARR_BADARRAY;
}
else if (index) { //need to check bounds properly here with ia->len, but it won't work
ia->data[index] = val;
//printf("length of array: %d\n", ia->len);
return INTARR_OK;
}
return INTARR_BADINDEX;
}
int main() {
intarr_t* arr = intarr_create(11);
intarr_t* arra = NULL;
intarr_set(arr, 80, 420);
return 0;
}
要檢查intarr_set()
索引範圍,我想查看索引值,看它是否在0和ia->len
之間。但是,ia->len
正在返回420而不是主要指定的11。不應ia->len
具有自intarr_create()
值11產生的intarr_t對象指向original
爲11 len
?爲什麼是這樣? val
不是intarr_t
結構的一部分。這只是一個參數。我試圖在的arr
上運行。
現在我已經寫了if (index)
只是爲了使程序編譯正確,直到這被調試。
在intarr_set()
index
返回正確的值。
val
in intarr_set()
返回正確的值。
在intarr_create()
len
返回正確的值。
即使data
在original
,originalp
和arr
包含正確的值。
ia->len
不會返回正確的值。
爲什麼?
有人能告訴我什麼,我在這裏失蹤?謝謝。
免得我們曾經厭倦[閱讀本(http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope)。 – WhozCraig